From 3cea343aaf7224808ca4cfab9325eaa726b9d465 Mon Sep 17 00:00:00 2001 From: kandrusyak Date: Mon, 23 May 2022 12:56:31 +0300 Subject: [PATCH] first commit --- CHANGELOG.md | 77 + README.md | 26 + index.html | 21 + package-lock.json | 3506 +++++++++++++++++ package.json | 28 + postcss.config.js | 7 + public/_redirects | 1 + src/App.jsx | 163 + src/charts/BarChart01.jsx | 162 + src/charts/BarChart02.jsx | 99 + src/charts/BarChart03.jsx | 156 + src/charts/BarChart04.jsx | 149 + src/charts/BarChart05.jsx | 157 + src/charts/BarChart06.jsx | 164 + src/charts/ChartjsConfig.jsx | 42 + src/charts/DoughnutChart.jsx | 114 + src/charts/LineChart01.jsx | 76 + src/charts/LineChart02.jsx | 153 + src/charts/LineChart03.jsx | 88 + src/charts/LineChart04.jsx | 78 + src/charts/LineChart05.jsx | 157 + src/charts/LineChart06.jsx | 94 + src/charts/LineChart07.jsx | 86 + src/charts/LineChart08.jsx | 84 + src/charts/LineChart09.jsx | 69 + src/charts/PieChart.jsx | 117 + src/charts/PolarChart.jsx | 113 + src/charts/RealtimeChart.jsx | 120 + src/components/AccordionBasic.jsx | 26 + src/components/AccordionTableItem.jsx | 73 + src/components/AccordionTableRichItem.jsx | 66 + src/components/Banner.jsx | 79 + src/components/Banner2.jsx | 79 + src/components/DateSelect.jsx | 116 + src/components/Datepicker.jsx | 38 + src/components/DropdownClassic.jsx | 113 + src/components/DropdownEditMenu.jsx | 75 + src/components/DropdownFilter.jsx | 115 + src/components/DropdownFull.jsx | 109 + src/components/DropdownHelp.jsx | 111 + src/components/DropdownNotifications.jsx | 106 + src/components/DropdownProfile.jsx | 100 + src/components/DropdownSort.jsx | 90 + src/components/DropdownSwitch.jsx | 110 + src/components/DropdownTransaction.jsx | 90 + src/components/ModalAction.jsx | 80 + src/components/ModalBasic.jsx | 82 + src/components/ModalBlank.jsx | 69 + src/components/ModalCookies.jsx | 84 + src/components/ModalSearch.jsx | 197 + src/components/Notification.jsx | 69 + src/components/PaginationClassic.jsx | 23 + src/components/PaginationNumeric.jsx | 45 + src/components/PaginationNumeric2.jsx | 37 + src/components/Toast.jsx | 79 + src/components/Toast2.jsx | 79 + src/components/Toast3.jsx | 66 + src/components/Tooltip.jsx | 90 + src/css/additional-styles/flatpickr.scss | 228 ++ src/css/additional-styles/range-slider.scss | 55 + src/css/additional-styles/theme.scss | 11 + src/css/additional-styles/toggle-switch.scss | 44 + .../additional-styles/utility-patterns.scss | 106 + src/css/style.scss | 13 + src/css/tailwind.config.js | 67 + src/favicon.svg | 15 + src/images/404-illustration.svg | 1 + src/images/announcement-icon.svg | 34 + src/images/applications-image-01.jpg | Bin 0 -> 25101 bytes src/images/applications-image-02.jpg | Bin 0 -> 12949 bytes src/images/applications-image-03.jpg | Bin 0 -> 12879 bytes src/images/applications-image-04.jpg | Bin 0 -> 11517 bytes src/images/applications-image-05.jpg | Bin 0 -> 15799 bytes src/images/applications-image-06.jpg | Bin 0 -> 23732 bytes src/images/applications-image-07.jpg | Bin 0 -> 15753 bytes src/images/applications-image-08.jpg | Bin 0 -> 12879 bytes src/images/applications-image-09.jpg | Bin 0 -> 14298 bytes src/images/applications-image-10.jpg | Bin 0 -> 18981 bytes src/images/applications-image-11.jpg | Bin 0 -> 13290 bytes src/images/applications-image-12.jpg | Bin 0 -> 32027 bytes src/images/applications-image-13.jpg | Bin 0 -> 22837 bytes src/images/applications-image-14.jpg | Bin 0 -> 20119 bytes src/images/applications-image-15.jpg | Bin 0 -> 15476 bytes src/images/applications-image-16.jpg | Bin 0 -> 16550 bytes src/images/applications-image-17.jpg | Bin 0 -> 14251 bytes src/images/applications-image-18.jpg | Bin 0 -> 24758 bytes src/images/applications-image-19.jpg | Bin 0 -> 120209 bytes src/images/applications-image-20.jpg | Bin 0 -> 15667 bytes src/images/applications-image-21.jpg | Bin 0 -> 19213 bytes src/images/applications-image-22.jpg | Bin 0 -> 24471 bytes src/images/applications-image-23.jpg | Bin 0 -> 26915 bytes src/images/applications-image-24.jpg | Bin 0 -> 21104 bytes src/images/applications-image-25.jpg | Bin 0 -> 11867 bytes src/images/applications-image-26.jpg | Bin 0 -> 13653 bytes src/images/applications-image-27.jpg | Bin 0 -> 15490 bytes src/images/applications-image-28.jpg | Bin 0 -> 15374 bytes src/images/applications-image-29.jpg | Bin 0 -> 16257 bytes src/images/applications-image-30.jpg | Bin 0 -> 7990 bytes src/images/applications-image-31.jpg | Bin 0 -> 12358 bytes src/images/applications-image-32.jpg | Bin 0 -> 12301 bytes src/images/auth-decoration.png | Bin 0 -> 17817 bytes src/images/auth-image.jpg | Bin 0 -> 232046 bytes src/images/avatar-01.jpg | Bin 0 -> 2630 bytes src/images/avatar-02.jpg | Bin 0 -> 2473 bytes src/images/avatar-03.jpg | Bin 0 -> 3228 bytes src/images/avatar-04.jpg | Bin 0 -> 2243 bytes src/images/avatar-05.jpg | Bin 0 -> 3608 bytes src/images/avatar-06.jpg | Bin 0 -> 2950 bytes src/images/channel-01.png | Bin 0 -> 762 bytes src/images/channel-02.png | Bin 0 -> 767 bytes src/images/channel-03.png | Bin 0 -> 773 bytes src/images/chat-image.jpg | Bin 0 -> 21415 bytes src/images/company-bg.jpg | Bin 0 -> 100699 bytes src/images/company-icon-01.svg | 1 + src/images/company-icon-02.svg | 1 + src/images/company-icon-03.svg | 1 + src/images/company-icon-04.svg | 1 + src/images/company-icon-05.svg | 1 + src/images/company-icon-06.svg | 1 + src/images/company-icon-07.svg | 1 + src/images/company-icon-08.svg | 1 + src/images/favicon.png | Bin 0 -> 16341 bytes src/images/feed-image-01.jpg | Bin 0 -> 45358 bytes src/images/feed-image-02.jpg | Bin 0 -> 19234 bytes src/images/group-avatar-01.png | Bin 0 -> 2164 bytes src/images/group-avatar-02.png | Bin 0 -> 1858 bytes src/images/group-avatar-03.png | Bin 0 -> 2349 bytes src/images/group-avatar-04.png | Bin 0 -> 1433 bytes src/images/icon-01.svg | 20 + src/images/icon-02.svg | 20 + src/images/icon-03.svg | 20 + src/images/inbox-image.jpg | Bin 0 -> 26737 bytes src/images/meetup-image.jpg | Bin 0 -> 46911 bytes src/images/meetup-photo-01.jpg | Bin 0 -> 12455 bytes src/images/meetup-photo-02.jpg | Bin 0 -> 10830 bytes src/images/meetup-photo-03.jpg | Bin 0 -> 10277 bytes src/images/meetups-thumb-01.jpg | Bin 0 -> 27897 bytes src/images/meetups-thumb-02.jpg | Bin 0 -> 27058 bytes src/images/meetups-thumb-03.jpg | Bin 0 -> 16228 bytes src/images/meetups-thumb-04.jpg | Bin 0 -> 26629 bytes src/images/meetups-thumb-05.jpg | Bin 0 -> 24957 bytes src/images/meetups-thumb-06.jpg | Bin 0 -> 25259 bytes src/images/meetups-thumb-07.jpg | Bin 0 -> 35483 bytes src/images/meetups-thumb-08.jpg | Bin 0 -> 19617 bytes src/images/modal-image.jpg | Bin 0 -> 28085 bytes src/images/onboarding-image.jpg | Bin 0 -> 44893 bytes src/images/pay-bg.jpg | Bin 0 -> 41005 bytes src/images/product-image.jpg | Bin 0 -> 90290 bytes src/images/profile-bg.jpg | Bin 0 -> 24959 bytes src/images/related-product-01.jpg | Bin 0 -> 15939 bytes src/images/related-product-02.jpg | Bin 0 -> 9456 bytes src/images/related-product-03.jpg | Bin 0 -> 15546 bytes src/images/task-image-01.jpg | Bin 0 -> 5075 bytes src/images/task-image-02.jpg | Bin 0 -> 13301 bytes src/images/transactions-image-01.svg | 4 + src/images/transactions-image-02.svg | 4 + src/images/transactions-image-03.svg | 4 + src/images/transactions-image-04.svg | 4 + src/images/transactions-image-05.svg | 4 + src/images/transactions-image-06.svg | 4 + src/images/transactions-image-07.svg | 4 + src/images/transactions-image-08.svg | 4 + src/images/user-128-01.jpg | Bin 0 -> 9348 bytes src/images/user-28-01.jpg | Bin 0 -> 1105 bytes src/images/user-28-02.jpg | Bin 0 -> 1242 bytes src/images/user-28-03.jpg | Bin 0 -> 1029 bytes src/images/user-28-04.jpg | Bin 0 -> 1165 bytes src/images/user-28-05.jpg | Bin 0 -> 1048 bytes src/images/user-28-06.jpg | Bin 0 -> 1092 bytes src/images/user-28-07.jpg | Bin 0 -> 975 bytes src/images/user-28-08.jpg | Bin 0 -> 1106 bytes src/images/user-28-09.jpg | Bin 0 -> 916 bytes src/images/user-28-10.jpg | Bin 0 -> 1146 bytes src/images/user-28-11.jpg | Bin 0 -> 1177 bytes src/images/user-28-12.jpg | Bin 0 -> 1066 bytes src/images/user-32-01.jpg | Bin 0 -> 1198 bytes src/images/user-32-02.jpg | Bin 0 -> 1379 bytes src/images/user-32-03.jpg | Bin 0 -> 1067 bytes src/images/user-32-04.jpg | Bin 0 -> 1274 bytes src/images/user-32-05.jpg | Bin 0 -> 1173 bytes src/images/user-32-06.jpg | Bin 0 -> 1290 bytes src/images/user-32-07.jpg | Bin 0 -> 1191 bytes src/images/user-32-08.jpg | Bin 0 -> 1304 bytes src/images/user-36-01.jpg | Bin 0 -> 1486 bytes src/images/user-36-02.jpg | Bin 0 -> 1504 bytes src/images/user-36-03.jpg | Bin 0 -> 932 bytes src/images/user-36-04.jpg | Bin 0 -> 1289 bytes src/images/user-36-05.jpg | Bin 0 -> 1385 bytes src/images/user-40-01.jpg | Bin 0 -> 3057 bytes src/images/user-40-02.jpg | Bin 0 -> 2620 bytes src/images/user-40-03.jpg | Bin 0 -> 3058 bytes src/images/user-40-04.jpg | Bin 0 -> 2847 bytes src/images/user-40-05.jpg | Bin 0 -> 2783 bytes src/images/user-40-06.jpg | Bin 0 -> 3034 bytes src/images/user-40-07.jpg | Bin 0 -> 3037 bytes src/images/user-40-08.jpg | Bin 0 -> 2689 bytes src/images/user-40-09.jpg | Bin 0 -> 3677 bytes src/images/user-40-10.jpg | Bin 0 -> 2702 bytes src/images/user-40-11.jpg | Bin 0 -> 1572 bytes src/images/user-40-12.jpg | Bin 0 -> 1474 bytes src/images/user-64-01.jpg | Bin 0 -> 3592 bytes src/images/user-64-02.jpg | Bin 0 -> 3398 bytes src/images/user-64-03.jpg | Bin 0 -> 3866 bytes src/images/user-64-04.jpg | Bin 0 -> 3796 bytes src/images/user-64-05.jpg | Bin 0 -> 2684 bytes src/images/user-64-06.jpg | Bin 0 -> 3057 bytes src/images/user-64-07.jpg | Bin 0 -> 3220 bytes src/images/user-64-08.jpg | Bin 0 -> 2403 bytes src/images/user-64-09.jpg | Bin 0 -> 3078 bytes src/images/user-64-10.jpg | Bin 0 -> 2561 bytes src/images/user-64-11.jpg | Bin 0 -> 3921 bytes src/images/user-64-12.jpg | Bin 0 -> 3313 bytes src/images/user-64-13.jpg | Bin 0 -> 3268 bytes src/images/user-64-14.jpg | Bin 0 -> 2828 bytes src/images/user-avatar-32.png | Bin 0 -> 1077 bytes src/images/user-avatar-80.png | Bin 0 -> 2222 bytes src/main.jsx | 13 + src/pages/Analytics.jsx | 92 + src/pages/Calendar.jsx | 461 +++ src/pages/Campaigns.jsx | 423 ++ src/pages/Dashboard.jsx | 103 + src/pages/Fintech.jsx | 104 + src/pages/Inbox.jsx | 43 + src/pages/Messages.jsx | 55 + src/pages/Onboarding01.jsx | 135 + src/pages/Onboarding02.jsx | 145 + src/pages/Onboarding03.jsx | 133 + src/pages/Onboarding04.jsx | 101 + src/pages/ResetPassword.jsx | 73 + src/pages/Signin.jsx | 97 + src/pages/Signup.jsx | 101 + src/pages/community/Feed.jsx | 111 + src/pages/community/Forum.jsx | 86 + src/pages/community/ForumPost.jsx | 59 + src/pages/community/Meetups.jsx | 104 + src/pages/community/MeetupsPost.jsx | 431 ++ src/pages/community/Profile.jsx | 43 + src/pages/community/UsersTabs.jsx | 196 + src/pages/community/UsersTiles.jsx | 196 + src/pages/component/AccordionPage.jsx | 151 + src/pages/component/AlertPage.jsx | 226 ++ src/pages/component/AvatarPage.jsx | 228 ++ src/pages/component/BadgePage.jsx | 186 + src/pages/component/BreadcrumbPage.jsx | 120 + src/pages/component/ButtonPage.jsx | 235 ++ src/pages/component/DropdownPage.jsx | 123 + src/pages/component/FormPage.jsx | 384 ++ src/pages/component/IconsPage.jsx | 79 + src/pages/component/ModalPage.jsx | 575 +++ src/pages/component/PaginationPage.jsx | 75 + src/pages/component/TabsPage.jsx | 176 + src/pages/component/TooltipPage.jsx | 203 + src/pages/ecommerce/Cart.jsx | 100 + src/pages/ecommerce/Cart2.jsx | 145 + src/pages/ecommerce/Cart3.jsx | 282 ++ src/pages/ecommerce/Customers.jsx | 84 + src/pages/ecommerce/Invoices.jsx | 109 + src/pages/ecommerce/Orders.jsx | 79 + src/pages/ecommerce/Pay.jsx | 150 + src/pages/ecommerce/Product.jsx | 577 +++ src/pages/ecommerce/Shop.jsx | 136 + src/pages/ecommerce/Shop2.jsx | 93 + src/pages/finance/CreditCards.jsx | 437 ++ src/pages/finance/TransactionDetails.jsx | 107 + src/pages/finance/Transactions.jsx | 112 + src/pages/job/CompanyProfile.jsx | 241 ++ src/pages/job/JobListing.jsx | 238 ++ src/pages/job/JobPost.jsx | 279 ++ src/pages/settings/Account.jsx | 50 + src/pages/settings/Apps.jsx | 50 + src/pages/settings/Billing.jsx | 50 + src/pages/settings/Feedback.jsx | 50 + src/pages/settings/Notifications.jsx | 50 + src/pages/settings/Plans.jsx | 50 + src/pages/tasks/TasksKanban.jsx | 110 + src/pages/tasks/TasksList.jsx | 504 +++ src/pages/utility/Changelog.jsx | 228 ++ src/pages/utility/EmptyState.jsx | 81 + src/pages/utility/Faqs.jsx | 228 ++ src/pages/utility/KnowledgeBase.jsx | 550 +++ src/pages/utility/PageNotFound.jsx | 49 + src/pages/utility/Roadmap.jsx | 363 ++ src/partials/Header.jsx | 68 + src/partials/Sidebar.jsx | 1596 ++++++++ src/partials/SidebarLinkGroup.jsx | 21 + src/partials/actions/DeleteButton.jsx | 16 + src/partials/actions/SearchForm.jsx | 24 + src/partials/analytics/AnalyticsCard01.jsx | 123 + src/partials/analytics/AnalyticsCard02.jsx | 139 + src/partials/analytics/AnalyticsCard03.jsx | 74 + src/partials/analytics/AnalyticsCard04.jsx | 49 + src/partials/analytics/AnalyticsCard05.jsx | 96 + src/partials/analytics/AnalyticsCard06.jsx | 96 + src/partials/analytics/AnalyticsCard07.jsx | 96 + src/partials/analytics/AnalyticsCard08.jsx | 44 + src/partials/analytics/AnalyticsCard09.jsx | 46 + src/partials/analytics/AnalyticsCard10.jsx | 44 + src/partials/analytics/AnalyticsCard11.jsx | 280 ++ .../applications/ApplicationsCard01.jsx | 103 + .../applications/ApplicationsCard02.jsx | 35 + .../applications/ApplicationsCard03.jsx | 66 + src/partials/campaigns/CampaignsCard.jsx | 99 + src/partials/community/FeedLeftContent.jsx | 113 + src/partials/community/FeedPosts.jsx | 384 ++ src/partials/community/FeedRightContent.jsx | 240 ++ src/partials/community/ForumEntries.jsx | 427 ++ src/partials/community/ForumEntry.jsx | 431 ++ src/partials/community/ForumLeftContent.jsx | 97 + .../community/ForumPostRightContent.jsx | 121 + src/partials/community/ForumRightContent.jsx | 286 ++ src/partials/community/MeetupsPosts.jsx | 582 +++ src/partials/community/ProfileBody.jsx | 343 ++ src/partials/community/ProfileSidebar.jsx | 161 + src/partials/community/UsersTabsCard.jsx | 65 + src/partials/community/UsersTilesCard.jsx | 75 + src/partials/customers/CustomersTable.jsx | 255 ++ src/partials/customers/CustomersTableItem.jsx | 64 + src/partials/dashboard/DashboardAvatars.jsx | 43 + src/partials/dashboard/DashboardCard01.jsx | 97 + src/partials/dashboard/DashboardCard02.jsx | 97 + src/partials/dashboard/DashboardCard03.jsx | 97 + src/partials/dashboard/DashboardCard04.jsx | 52 + src/partials/dashboard/DashboardCard05.jsx | 100 + src/partials/dashboard/DashboardCard06.jsx | 44 + src/partials/dashboard/DashboardCard07.jsx | 165 + src/partials/dashboard/DashboardCard08.jsx | 91 + src/partials/dashboard/DashboardCard09.jsx | 64 + src/partials/dashboard/DashboardCard10.jsx | 110 + src/partials/dashboard/DashboardCard11.jsx | 120 + src/partials/dashboard/WelcomeBanner.jsx | 59 + src/partials/ecommerce/CartItems.jsx | 206 + src/partials/ecommerce/ShopCards01.jsx | 390 ++ src/partials/ecommerce/ShopCards02.jsx | 191 + src/partials/ecommerce/ShopCards03.jsx | 206 + src/partials/ecommerce/ShopCards04.jsx | 202 + src/partials/ecommerce/ShopCards05.jsx | 85 + src/partials/ecommerce/ShopCards06.jsx | 66 + src/partials/ecommerce/ShopCards07.jsx | 972 +++++ src/partials/ecommerce/ShopSidebar.jsx | 181 + src/partials/finance/TransactionPanel.jsx | 141 + src/partials/finance/TransactionsTable.jsx | 188 + src/partials/finance/TransactionsTable02.jsx | 190 + .../finance/TransactionsTableItem.jsx | 58 + .../finance/TransactionsTableItem02.jsx | 58 + src/partials/fintech/FintechCard01.jsx | 101 + src/partials/fintech/FintechCard02.jsx | 133 + src/partials/fintech/FintechCard03.jsx | 48 + src/partials/fintech/FintechCard04.jsx | 49 + src/partials/fintech/FintechCard05.jsx | 155 + src/partials/fintech/FintechCard06.jsx | 155 + src/partials/fintech/FintechCard07.jsx | 78 + src/partials/fintech/FintechCard08.jsx | 61 + src/partials/fintech/FintechCard09.jsx | 48 + src/partials/fintech/FintechCard10.jsx | 65 + src/partials/fintech/FintechCard11.jsx | 65 + src/partials/fintech/FintechCard12.jsx | 65 + src/partials/fintech/FintechCard13.jsx | 65 + src/partials/fintech/FintechCard14.jsx | 313 ++ src/partials/fintech/FintechIntro.jsx | 65 + src/partials/inbox/InboxBody.jsx | 167 + src/partials/inbox/InboxSidebar.jsx | 155 + src/partials/inbox/Mail.jsx | 47 + src/partials/invoices/InvoicesTable.jsx | 219 + src/partials/invoices/InvoicesTableItem.jsx | 109 + src/partials/job/JobListItem.jsx | 46 + src/partials/job/JobSidebar.jsx | 160 + src/partials/messages/ChannelMenu.jsx | 108 + src/partials/messages/Channels.jsx | 45 + src/partials/messages/DirectMessages.jsx | 106 + src/partials/messages/MessagesBody.jsx | 128 + src/partials/messages/MessagesFooter.jsx | 27 + src/partials/messages/MessagesHeader.jsx | 55 + src/partials/messages/MessagesSidebar.jsx | 59 + src/partials/orders/OrdersTable.jsx | 257 ++ src/partials/orders/OrdersTableItem.jsx | 114 + src/partials/settings/AccountPanel.jsx | 91 + src/partials/settings/AppsPanel.jsx | 374 ++ src/partials/settings/BillingPanel.jsx | 147 + src/partials/settings/FeedbackPanel.jsx | 78 + src/partials/settings/NotificationsPanel.jsx | 133 + src/partials/settings/PlansPanel.jsx | 273 ++ src/partials/settings/SettingsSidebar.jsx | 75 + src/partials/tasks/Task01.jsx | 57 + src/partials/tasks/Task02.jsx | 52 + src/partials/tasks/Task03.jsx | 46 + src/partials/tasks/Task04.jsx | 63 + src/partials/tasks/Task05.jsx | 52 + src/partials/tasks/Task06.jsx | 51 + src/partials/tasks/Task07.jsx | 57 + src/partials/tasks/Task08.jsx | 57 + src/partials/tasks/Task09.jsx | 61 + src/partials/tasks/TasksGroups.jsx | 28 + src/utils/Transition.jsx | 116 + src/utils/Utils.js | 34 + vite.config.js | 29 + 395 files changed, 37099 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/_redirects create mode 100644 src/App.jsx create mode 100644 src/charts/BarChart01.jsx create mode 100644 src/charts/BarChart02.jsx create mode 100644 src/charts/BarChart03.jsx create mode 100644 src/charts/BarChart04.jsx create mode 100644 src/charts/BarChart05.jsx create mode 100644 src/charts/BarChart06.jsx create mode 100644 src/charts/ChartjsConfig.jsx create mode 100644 src/charts/DoughnutChart.jsx create mode 100644 src/charts/LineChart01.jsx create mode 100644 src/charts/LineChart02.jsx create mode 100644 src/charts/LineChart03.jsx create mode 100644 src/charts/LineChart04.jsx create mode 100644 src/charts/LineChart05.jsx create mode 100644 src/charts/LineChart06.jsx create mode 100644 src/charts/LineChart07.jsx create mode 100644 src/charts/LineChart08.jsx create mode 100644 src/charts/LineChart09.jsx create mode 100644 src/charts/PieChart.jsx create mode 100644 src/charts/PolarChart.jsx create mode 100644 src/charts/RealtimeChart.jsx create mode 100644 src/components/AccordionBasic.jsx create mode 100644 src/components/AccordionTableItem.jsx create mode 100644 src/components/AccordionTableRichItem.jsx create mode 100644 src/components/Banner.jsx create mode 100644 src/components/Banner2.jsx create mode 100644 src/components/DateSelect.jsx create mode 100644 src/components/Datepicker.jsx create mode 100644 src/components/DropdownClassic.jsx create mode 100644 src/components/DropdownEditMenu.jsx create mode 100644 src/components/DropdownFilter.jsx create mode 100644 src/components/DropdownFull.jsx create mode 100644 src/components/DropdownHelp.jsx create mode 100644 src/components/DropdownNotifications.jsx create mode 100644 src/components/DropdownProfile.jsx create mode 100644 src/components/DropdownSort.jsx create mode 100644 src/components/DropdownSwitch.jsx create mode 100644 src/components/DropdownTransaction.jsx create mode 100644 src/components/ModalAction.jsx create mode 100644 src/components/ModalBasic.jsx create mode 100644 src/components/ModalBlank.jsx create mode 100644 src/components/ModalCookies.jsx create mode 100644 src/components/ModalSearch.jsx create mode 100644 src/components/Notification.jsx create mode 100644 src/components/PaginationClassic.jsx create mode 100644 src/components/PaginationNumeric.jsx create mode 100644 src/components/PaginationNumeric2.jsx create mode 100644 src/components/Toast.jsx create mode 100644 src/components/Toast2.jsx create mode 100644 src/components/Toast3.jsx create mode 100644 src/components/Tooltip.jsx create mode 100644 src/css/additional-styles/flatpickr.scss create mode 100644 src/css/additional-styles/range-slider.scss create mode 100644 src/css/additional-styles/theme.scss create mode 100644 src/css/additional-styles/toggle-switch.scss create mode 100644 src/css/additional-styles/utility-patterns.scss create mode 100644 src/css/style.scss create mode 100644 src/css/tailwind.config.js create mode 100644 src/favicon.svg create mode 100644 src/images/404-illustration.svg create mode 100644 src/images/announcement-icon.svg create mode 100644 src/images/applications-image-01.jpg create mode 100644 src/images/applications-image-02.jpg create mode 100644 src/images/applications-image-03.jpg create mode 100644 src/images/applications-image-04.jpg create mode 100644 src/images/applications-image-05.jpg create mode 100644 src/images/applications-image-06.jpg create mode 100644 src/images/applications-image-07.jpg create mode 100644 src/images/applications-image-08.jpg create mode 100644 src/images/applications-image-09.jpg create mode 100644 src/images/applications-image-10.jpg create mode 100644 src/images/applications-image-11.jpg create mode 100644 src/images/applications-image-12.jpg create mode 100644 src/images/applications-image-13.jpg create mode 100644 src/images/applications-image-14.jpg create mode 100644 src/images/applications-image-15.jpg create mode 100644 src/images/applications-image-16.jpg create mode 100644 src/images/applications-image-17.jpg create mode 100644 src/images/applications-image-18.jpg create mode 100644 src/images/applications-image-19.jpg create mode 100644 src/images/applications-image-20.jpg create mode 100644 src/images/applications-image-21.jpg create mode 100644 src/images/applications-image-22.jpg create mode 100644 src/images/applications-image-23.jpg create mode 100644 src/images/applications-image-24.jpg create mode 100644 src/images/applications-image-25.jpg create mode 100644 src/images/applications-image-26.jpg create mode 100644 src/images/applications-image-27.jpg create mode 100644 src/images/applications-image-28.jpg create mode 100644 src/images/applications-image-29.jpg create mode 100644 src/images/applications-image-30.jpg create mode 100644 src/images/applications-image-31.jpg create mode 100644 src/images/applications-image-32.jpg create mode 100644 src/images/auth-decoration.png create mode 100644 src/images/auth-image.jpg create mode 100644 src/images/avatar-01.jpg create mode 100644 src/images/avatar-02.jpg create mode 100644 src/images/avatar-03.jpg create mode 100644 src/images/avatar-04.jpg create mode 100644 src/images/avatar-05.jpg create mode 100644 src/images/avatar-06.jpg create mode 100644 src/images/channel-01.png create mode 100644 src/images/channel-02.png create mode 100644 src/images/channel-03.png create mode 100644 src/images/chat-image.jpg create mode 100644 src/images/company-bg.jpg create mode 100644 src/images/company-icon-01.svg create mode 100644 src/images/company-icon-02.svg create mode 100644 src/images/company-icon-03.svg create mode 100644 src/images/company-icon-04.svg create mode 100644 src/images/company-icon-05.svg create mode 100644 src/images/company-icon-06.svg create mode 100644 src/images/company-icon-07.svg create mode 100644 src/images/company-icon-08.svg create mode 100644 src/images/favicon.png create mode 100644 src/images/feed-image-01.jpg create mode 100644 src/images/feed-image-02.jpg create mode 100644 src/images/group-avatar-01.png create mode 100644 src/images/group-avatar-02.png create mode 100644 src/images/group-avatar-03.png create mode 100644 src/images/group-avatar-04.png create mode 100644 src/images/icon-01.svg create mode 100644 src/images/icon-02.svg create mode 100644 src/images/icon-03.svg create mode 100644 src/images/inbox-image.jpg create mode 100644 src/images/meetup-image.jpg create mode 100644 src/images/meetup-photo-01.jpg create mode 100644 src/images/meetup-photo-02.jpg create mode 100644 src/images/meetup-photo-03.jpg create mode 100644 src/images/meetups-thumb-01.jpg create mode 100644 src/images/meetups-thumb-02.jpg create mode 100644 src/images/meetups-thumb-03.jpg create mode 100644 src/images/meetups-thumb-04.jpg create mode 100644 src/images/meetups-thumb-05.jpg create mode 100644 src/images/meetups-thumb-06.jpg create mode 100644 src/images/meetups-thumb-07.jpg create mode 100644 src/images/meetups-thumb-08.jpg create mode 100644 src/images/modal-image.jpg create mode 100644 src/images/onboarding-image.jpg create mode 100644 src/images/pay-bg.jpg create mode 100644 src/images/product-image.jpg create mode 100644 src/images/profile-bg.jpg create mode 100644 src/images/related-product-01.jpg create mode 100644 src/images/related-product-02.jpg create mode 100644 src/images/related-product-03.jpg create mode 100644 src/images/task-image-01.jpg create mode 100644 src/images/task-image-02.jpg create mode 100644 src/images/transactions-image-01.svg create mode 100644 src/images/transactions-image-02.svg create mode 100644 src/images/transactions-image-03.svg create mode 100644 src/images/transactions-image-04.svg create mode 100644 src/images/transactions-image-05.svg create mode 100644 src/images/transactions-image-06.svg create mode 100644 src/images/transactions-image-07.svg create mode 100644 src/images/transactions-image-08.svg create mode 100644 src/images/user-128-01.jpg create mode 100644 src/images/user-28-01.jpg create mode 100644 src/images/user-28-02.jpg create mode 100644 src/images/user-28-03.jpg create mode 100644 src/images/user-28-04.jpg create mode 100644 src/images/user-28-05.jpg create mode 100644 src/images/user-28-06.jpg create mode 100644 src/images/user-28-07.jpg create mode 100644 src/images/user-28-08.jpg create mode 100644 src/images/user-28-09.jpg create mode 100644 src/images/user-28-10.jpg create mode 100644 src/images/user-28-11.jpg create mode 100644 src/images/user-28-12.jpg create mode 100644 src/images/user-32-01.jpg create mode 100644 src/images/user-32-02.jpg create mode 100644 src/images/user-32-03.jpg create mode 100644 src/images/user-32-04.jpg create mode 100644 src/images/user-32-05.jpg create mode 100644 src/images/user-32-06.jpg create mode 100644 src/images/user-32-07.jpg create mode 100644 src/images/user-32-08.jpg create mode 100644 src/images/user-36-01.jpg create mode 100644 src/images/user-36-02.jpg create mode 100644 src/images/user-36-03.jpg create mode 100644 src/images/user-36-04.jpg create mode 100644 src/images/user-36-05.jpg create mode 100644 src/images/user-40-01.jpg create mode 100644 src/images/user-40-02.jpg create mode 100644 src/images/user-40-03.jpg create mode 100644 src/images/user-40-04.jpg create mode 100644 src/images/user-40-05.jpg create mode 100644 src/images/user-40-06.jpg create mode 100644 src/images/user-40-07.jpg create mode 100644 src/images/user-40-08.jpg create mode 100644 src/images/user-40-09.jpg create mode 100644 src/images/user-40-10.jpg create mode 100644 src/images/user-40-11.jpg create mode 100644 src/images/user-40-12.jpg create mode 100644 src/images/user-64-01.jpg create mode 100644 src/images/user-64-02.jpg create mode 100644 src/images/user-64-03.jpg create mode 100644 src/images/user-64-04.jpg create mode 100644 src/images/user-64-05.jpg create mode 100644 src/images/user-64-06.jpg create mode 100644 src/images/user-64-07.jpg create mode 100644 src/images/user-64-08.jpg create mode 100644 src/images/user-64-09.jpg create mode 100644 src/images/user-64-10.jpg create mode 100644 src/images/user-64-11.jpg create mode 100644 src/images/user-64-12.jpg create mode 100644 src/images/user-64-13.jpg create mode 100644 src/images/user-64-14.jpg create mode 100644 src/images/user-avatar-32.png create mode 100644 src/images/user-avatar-80.png create mode 100644 src/main.jsx create mode 100644 src/pages/Analytics.jsx create mode 100644 src/pages/Calendar.jsx create mode 100644 src/pages/Campaigns.jsx create mode 100644 src/pages/Dashboard.jsx create mode 100644 src/pages/Fintech.jsx create mode 100644 src/pages/Inbox.jsx create mode 100644 src/pages/Messages.jsx create mode 100644 src/pages/Onboarding01.jsx create mode 100644 src/pages/Onboarding02.jsx create mode 100644 src/pages/Onboarding03.jsx create mode 100644 src/pages/Onboarding04.jsx create mode 100644 src/pages/ResetPassword.jsx create mode 100644 src/pages/Signin.jsx create mode 100644 src/pages/Signup.jsx create mode 100644 src/pages/community/Feed.jsx create mode 100644 src/pages/community/Forum.jsx create mode 100644 src/pages/community/ForumPost.jsx create mode 100644 src/pages/community/Meetups.jsx create mode 100644 src/pages/community/MeetupsPost.jsx create mode 100644 src/pages/community/Profile.jsx create mode 100644 src/pages/community/UsersTabs.jsx create mode 100644 src/pages/community/UsersTiles.jsx create mode 100644 src/pages/component/AccordionPage.jsx create mode 100644 src/pages/component/AlertPage.jsx create mode 100644 src/pages/component/AvatarPage.jsx create mode 100644 src/pages/component/BadgePage.jsx create mode 100644 src/pages/component/BreadcrumbPage.jsx create mode 100644 src/pages/component/ButtonPage.jsx create mode 100644 src/pages/component/DropdownPage.jsx create mode 100644 src/pages/component/FormPage.jsx create mode 100644 src/pages/component/IconsPage.jsx create mode 100644 src/pages/component/ModalPage.jsx create mode 100644 src/pages/component/PaginationPage.jsx create mode 100644 src/pages/component/TabsPage.jsx create mode 100644 src/pages/component/TooltipPage.jsx create mode 100644 src/pages/ecommerce/Cart.jsx create mode 100644 src/pages/ecommerce/Cart2.jsx create mode 100644 src/pages/ecommerce/Cart3.jsx create mode 100644 src/pages/ecommerce/Customers.jsx create mode 100644 src/pages/ecommerce/Invoices.jsx create mode 100644 src/pages/ecommerce/Orders.jsx create mode 100644 src/pages/ecommerce/Pay.jsx create mode 100644 src/pages/ecommerce/Product.jsx create mode 100644 src/pages/ecommerce/Shop.jsx create mode 100644 src/pages/ecommerce/Shop2.jsx create mode 100644 src/pages/finance/CreditCards.jsx create mode 100644 src/pages/finance/TransactionDetails.jsx create mode 100644 src/pages/finance/Transactions.jsx create mode 100644 src/pages/job/CompanyProfile.jsx create mode 100644 src/pages/job/JobListing.jsx create mode 100644 src/pages/job/JobPost.jsx create mode 100644 src/pages/settings/Account.jsx create mode 100644 src/pages/settings/Apps.jsx create mode 100644 src/pages/settings/Billing.jsx create mode 100644 src/pages/settings/Feedback.jsx create mode 100644 src/pages/settings/Notifications.jsx create mode 100644 src/pages/settings/Plans.jsx create mode 100644 src/pages/tasks/TasksKanban.jsx create mode 100644 src/pages/tasks/TasksList.jsx create mode 100644 src/pages/utility/Changelog.jsx create mode 100644 src/pages/utility/EmptyState.jsx create mode 100644 src/pages/utility/Faqs.jsx create mode 100644 src/pages/utility/KnowledgeBase.jsx create mode 100644 src/pages/utility/PageNotFound.jsx create mode 100644 src/pages/utility/Roadmap.jsx create mode 100644 src/partials/Header.jsx create mode 100644 src/partials/Sidebar.jsx create mode 100644 src/partials/SidebarLinkGroup.jsx create mode 100644 src/partials/actions/DeleteButton.jsx create mode 100644 src/partials/actions/SearchForm.jsx create mode 100644 src/partials/analytics/AnalyticsCard01.jsx create mode 100644 src/partials/analytics/AnalyticsCard02.jsx create mode 100644 src/partials/analytics/AnalyticsCard03.jsx create mode 100644 src/partials/analytics/AnalyticsCard04.jsx create mode 100644 src/partials/analytics/AnalyticsCard05.jsx create mode 100644 src/partials/analytics/AnalyticsCard06.jsx create mode 100644 src/partials/analytics/AnalyticsCard07.jsx create mode 100644 src/partials/analytics/AnalyticsCard08.jsx create mode 100644 src/partials/analytics/AnalyticsCard09.jsx create mode 100644 src/partials/analytics/AnalyticsCard10.jsx create mode 100644 src/partials/analytics/AnalyticsCard11.jsx create mode 100644 src/partials/applications/ApplicationsCard01.jsx create mode 100644 src/partials/applications/ApplicationsCard02.jsx create mode 100644 src/partials/applications/ApplicationsCard03.jsx create mode 100644 src/partials/campaigns/CampaignsCard.jsx create mode 100644 src/partials/community/FeedLeftContent.jsx create mode 100644 src/partials/community/FeedPosts.jsx create mode 100644 src/partials/community/FeedRightContent.jsx create mode 100644 src/partials/community/ForumEntries.jsx create mode 100644 src/partials/community/ForumEntry.jsx create mode 100644 src/partials/community/ForumLeftContent.jsx create mode 100644 src/partials/community/ForumPostRightContent.jsx create mode 100644 src/partials/community/ForumRightContent.jsx create mode 100644 src/partials/community/MeetupsPosts.jsx create mode 100644 src/partials/community/ProfileBody.jsx create mode 100644 src/partials/community/ProfileSidebar.jsx create mode 100644 src/partials/community/UsersTabsCard.jsx create mode 100644 src/partials/community/UsersTilesCard.jsx create mode 100644 src/partials/customers/CustomersTable.jsx create mode 100644 src/partials/customers/CustomersTableItem.jsx create mode 100644 src/partials/dashboard/DashboardAvatars.jsx create mode 100644 src/partials/dashboard/DashboardCard01.jsx create mode 100644 src/partials/dashboard/DashboardCard02.jsx create mode 100644 src/partials/dashboard/DashboardCard03.jsx create mode 100644 src/partials/dashboard/DashboardCard04.jsx create mode 100644 src/partials/dashboard/DashboardCard05.jsx create mode 100644 src/partials/dashboard/DashboardCard06.jsx create mode 100644 src/partials/dashboard/DashboardCard07.jsx create mode 100644 src/partials/dashboard/DashboardCard08.jsx create mode 100644 src/partials/dashboard/DashboardCard09.jsx create mode 100644 src/partials/dashboard/DashboardCard10.jsx create mode 100644 src/partials/dashboard/DashboardCard11.jsx create mode 100644 src/partials/dashboard/WelcomeBanner.jsx create mode 100644 src/partials/ecommerce/CartItems.jsx create mode 100644 src/partials/ecommerce/ShopCards01.jsx create mode 100644 src/partials/ecommerce/ShopCards02.jsx create mode 100644 src/partials/ecommerce/ShopCards03.jsx create mode 100644 src/partials/ecommerce/ShopCards04.jsx create mode 100644 src/partials/ecommerce/ShopCards05.jsx create mode 100644 src/partials/ecommerce/ShopCards06.jsx create mode 100644 src/partials/ecommerce/ShopCards07.jsx create mode 100644 src/partials/ecommerce/ShopSidebar.jsx create mode 100644 src/partials/finance/TransactionPanel.jsx create mode 100644 src/partials/finance/TransactionsTable.jsx create mode 100644 src/partials/finance/TransactionsTable02.jsx create mode 100644 src/partials/finance/TransactionsTableItem.jsx create mode 100644 src/partials/finance/TransactionsTableItem02.jsx create mode 100644 src/partials/fintech/FintechCard01.jsx create mode 100644 src/partials/fintech/FintechCard02.jsx create mode 100644 src/partials/fintech/FintechCard03.jsx create mode 100644 src/partials/fintech/FintechCard04.jsx create mode 100644 src/partials/fintech/FintechCard05.jsx create mode 100644 src/partials/fintech/FintechCard06.jsx create mode 100644 src/partials/fintech/FintechCard07.jsx create mode 100644 src/partials/fintech/FintechCard08.jsx create mode 100644 src/partials/fintech/FintechCard09.jsx create mode 100644 src/partials/fintech/FintechCard10.jsx create mode 100644 src/partials/fintech/FintechCard11.jsx create mode 100644 src/partials/fintech/FintechCard12.jsx create mode 100644 src/partials/fintech/FintechCard13.jsx create mode 100644 src/partials/fintech/FintechCard14.jsx create mode 100644 src/partials/fintech/FintechIntro.jsx create mode 100644 src/partials/inbox/InboxBody.jsx create mode 100644 src/partials/inbox/InboxSidebar.jsx create mode 100644 src/partials/inbox/Mail.jsx create mode 100644 src/partials/invoices/InvoicesTable.jsx create mode 100644 src/partials/invoices/InvoicesTableItem.jsx create mode 100644 src/partials/job/JobListItem.jsx create mode 100644 src/partials/job/JobSidebar.jsx create mode 100644 src/partials/messages/ChannelMenu.jsx create mode 100644 src/partials/messages/Channels.jsx create mode 100644 src/partials/messages/DirectMessages.jsx create mode 100644 src/partials/messages/MessagesBody.jsx create mode 100644 src/partials/messages/MessagesFooter.jsx create mode 100644 src/partials/messages/MessagesHeader.jsx create mode 100644 src/partials/messages/MessagesSidebar.jsx create mode 100644 src/partials/orders/OrdersTable.jsx create mode 100644 src/partials/orders/OrdersTableItem.jsx create mode 100644 src/partials/settings/AccountPanel.jsx create mode 100644 src/partials/settings/AppsPanel.jsx create mode 100644 src/partials/settings/BillingPanel.jsx create mode 100644 src/partials/settings/FeedbackPanel.jsx create mode 100644 src/partials/settings/NotificationsPanel.jsx create mode 100644 src/partials/settings/PlansPanel.jsx create mode 100644 src/partials/settings/SettingsSidebar.jsx create mode 100644 src/partials/tasks/Task01.jsx create mode 100644 src/partials/tasks/Task02.jsx create mode 100644 src/partials/tasks/Task03.jsx create mode 100644 src/partials/tasks/Task04.jsx create mode 100644 src/partials/tasks/Task05.jsx create mode 100644 src/partials/tasks/Task06.jsx create mode 100644 src/partials/tasks/Task07.jsx create mode 100644 src/partials/tasks/Task08.jsx create mode 100644 src/partials/tasks/Task09.jsx create mode 100644 src/partials/tasks/TasksGroups.jsx create mode 100644 src/utils/Transition.jsx create mode 100644 src/utils/Utils.js create mode 100644 vite.config.js diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..84e86f4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,77 @@ +# CHANGELOG.md + +## [4.0.0] - 2022-03-03 + +- v4 Release + +## [3.10.0] - 2022-02-23 + +- Add Forum pages + +## [3.9.0] - 2022-02-19 + +- Add more pages + +## [3.8.0] - 2022-02-09 + +- Add Meetups pages + +## [3.5.0] - 2022-02-08 + +- Add a new cart page + +## [3.4.1] - 2022-02-05 + +- Minor change + +## [3.4.0] - 2022-02-04 + +- Add Fintech page + +## [3.3.0] - 2022-01-25 + +- Replace CRA (Create React App) with Vite +- Remove Craco +- Update dependencies + +## [3.2.0] - 2022-01-13 + +- Minor changes + +## [3.1.0] - 2021-12-13 + +- Update Tailwind 3 +- Several improvements + +## [3.0.0] - 2021-10-20 + +Add more pages +Update dependencies and remove some + +## [2.2.0] - 2021-09-09 + +Add Cart, Cart 2 and Pay pages + +## [2.1.0] - 2021-09-06 + +Add Invoices page + +## [2.0.2] - 2021-08-30 + +Improve colors in settings sidebar and fix dashboard icon + +## [2.0.1] - 2021-08-30 + +Sidebar fix + +## [2.0.0] - 2021-08-30 + +Add more pages and components + +## [1.1.0] - 2021-05-06 + +Several improvements + +## [1.0.0] - 2021-04-20 + +First release \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f6dd146 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# Mosaic React + +React landing page template designed by Cruip. + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run dev +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Customize configuration +See [Configuration Reference](https://vitejs.dev/guide/). + +## Support notes +We are shipping our templates with a very basic React configuration to let you quickly get into the development process, but we don't discourage you from using any other configuration or framework built on the top of React. So, please note that any request dealing with React (e.g. extra features, customisations, et cetera) is to be considered out of the support scope. + +For more information about what support covers, please see our (FAQs)[https://cruip.com/faq/]. diff --git a/index.html b/index.html new file mode 100644 index 0000000..254e5fe --- /dev/null +++ b/index.html @@ -0,0 +1,21 @@ + + + + + + + Vite App + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..cf145e5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3506 @@ +{ + "name": "mosaic-react", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.1.0", + "dependencies": { + "@tailwindcss/forms": "^0.4.0", + "chart.js": "^3.5.0", + "chartjs-adapter-moment": "^1.0.0", + "moment": "^2.29.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-flatpickr": "^3.10.7", + "react-router-dom": "^6.2.1", + "react-transition-group": "^4.4.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^1.0.7", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.5", + "sass": "^1.49.0", + "tailwindcss": "^3.0.18", + "vite": "^2.7.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", + "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", + "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/types": "^7.16.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", + "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.0.tgz", + "integrity": "sha512-DeaQBx6EgEeuZPQACvC+mKneJsD8am1uiJugjgQK1+/Vt+Ai0GpFBC2T2fqnUad71WgOxyrZPE6BG1VaI6YqfQ==", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.1.4.tgz", + "integrity": "sha512-cMUBDonNY8PPeHWjIrYKbRn6bLSunh/Ixo2XLLBd3DM0uYBZft+c+04zkGhhN1lAwvoRKJ2FdtvhGhPgViHc6w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.5", + "@babel/plugin-transform-react-jsx": "^7.16.5", + "@babel/plugin-transform-react-jsx-development": "^7.16.5", + "@babel/plugin-transform-react-jsx-self": "^7.16.5", + "@babel/plugin-transform-react-jsx-source": "^7.16.5", + "@rollup/pluginutils": "^4.1.2", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + }, + "node_modules/autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "dependencies": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001301", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", + "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chart.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.0.tgz", + "integrity": "sha512-31gVuqqKp3lDIFmzpKIrBeum4OpZsQjSIAqlOpgjosHDJZlULtvwLEZKtEhIAZc7JMPaHlYMys40Qy9Mf+1AAg==" + }, + "node_modules/chartjs-adapter-moment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-moment/-/chartjs-adapter-moment-1.0.0.tgz", + "integrity": "sha512-PqlerEvQcc5hZLQ/NQWgBxgVQ4TRdvkW3c/t+SUEQSj78ia3hgLkf2VZ2yGJtltNbEEFyYGm+cA6XXevodYvWA==", + "peerDependencies": { + "chart.js": "^3.0.0", + "moment": "^2.10.2" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.52.tgz", + "integrity": "sha512-JGkh8HEh5PnVrhU4HbpyyO0O791dVY6k7AdqfDeqbcRMeoGxtNHWT77deR2nhvbLe4dKpxjlDEvdEwrvRLGu2Q==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", + "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.13.15", + "esbuild-darwin-64": "0.13.15", + "esbuild-darwin-arm64": "0.13.15", + "esbuild-freebsd-64": "0.13.15", + "esbuild-freebsd-arm64": "0.13.15", + "esbuild-linux-32": "0.13.15", + "esbuild-linux-64": "0.13.15", + "esbuild-linux-arm": "0.13.15", + "esbuild-linux-arm64": "0.13.15", + "esbuild-linux-mips64le": "0.13.15", + "esbuild-linux-ppc64le": "0.13.15", + "esbuild-netbsd-64": "0.13.15", + "esbuild-openbsd-64": "0.13.15", + "esbuild-sunos-64": "0.13.15", + "esbuild-windows-32": "0.13.15", + "esbuild-windows-64": "0.13.15", + "esbuild-windows-arm64": "0.13.15" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz", + "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz", + "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz", + "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz", + "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz", + "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz", + "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz", + "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz", + "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz", + "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz", + "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz", + "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz", + "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz", + "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz", + "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz", + "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz", + "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz", + "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatpickr": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", + "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" + }, + "node_modules/fraction.js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/history": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", + "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "license": "MIT", + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "dependencies": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-flatpickr": { + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/react-flatpickr/-/react-flatpickr-3.10.7.tgz", + "integrity": "sha512-dJ7cZAayefqWJnX4Xe8Piy13oK2h4aeGCH9tz+D2iSNh+kbezUAWVMVCKdTqjsNBqTMS4v0DkfMy2CP2atNCTQ==", + "dependencies": { + "flatpickr": "^4.6.2", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "react": "^17.0.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.1.tgz", + "integrity": "sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg==", + "dependencies": { + "history": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.1.tgz", + "integrity": "sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA==", + "dependencies": { + "history": "^5.2.0", + "react-router": "6.2.1" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.66.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.1.tgz", + "integrity": "sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/sass": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz", + "integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz", + "integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==", + "dependencies": { + "arg": "^5.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.21.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tailwindcss/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tailwindcss/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tailwindcss/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/vite": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.13.tgz", + "integrity": "sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.13.12", + "postcss": "^8.4.5", + "resolve": "^1.20.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "dev": true + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", + "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", + "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/types": "^7.16.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/pluginutils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", + "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@tailwindcss/forms": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.0.tgz", + "integrity": "sha512-DeaQBx6EgEeuZPQACvC+mKneJsD8am1uiJugjgQK1+/Vt+Ai0GpFBC2T2fqnUad71WgOxyrZPE6BG1VaI6YqfQ==", + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@vitejs/plugin-react": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.1.4.tgz", + "integrity": "sha512-cMUBDonNY8PPeHWjIrYKbRn6bLSunh/Ixo2XLLBd3DM0uYBZft+c+04zkGhhN1lAwvoRKJ2FdtvhGhPgViHc6w==", + "dev": true, + "requires": { + "@babel/core": "^7.16.5", + "@babel/plugin-transform-react-jsx": "^7.16.5", + "@babel/plugin-transform-react-jsx-development": "^7.16.5", + "@babel/plugin-transform-react-jsx-self": "^7.16.5", + "@babel/plugin-transform-react-jsx-source": "^7.16.5", + "@rollup/pluginutils": "^4.1.2", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + }, + "autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "requires": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-lite": { + "version": "1.0.30001301", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", + "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chart.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.0.tgz", + "integrity": "sha512-31gVuqqKp3lDIFmzpKIrBeum4OpZsQjSIAqlOpgjosHDJZlULtvwLEZKtEhIAZc7JMPaHlYMys40Qy9Mf+1AAg==" + }, + "chartjs-adapter-moment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-moment/-/chartjs-adapter-moment-1.0.0.tgz", + "integrity": "sha512-PqlerEvQcc5hZLQ/NQWgBxgVQ4TRdvkW3c/t+SUEQSj78ia3hgLkf2VZ2yGJtltNbEEFyYGm+cA6XXevodYvWA==", + "requires": {} + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "electron-to-chromium": { + "version": "1.4.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.52.tgz", + "integrity": "sha512-JGkh8HEh5PnVrhU4HbpyyO0O791dVY6k7AdqfDeqbcRMeoGxtNHWT77deR2nhvbLe4dKpxjlDEvdEwrvRLGu2Q==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "esbuild": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", + "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.15", + "esbuild-darwin-64": "0.13.15", + "esbuild-darwin-arm64": "0.13.15", + "esbuild-freebsd-64": "0.13.15", + "esbuild-freebsd-arm64": "0.13.15", + "esbuild-linux-32": "0.13.15", + "esbuild-linux-64": "0.13.15", + "esbuild-linux-arm": "0.13.15", + "esbuild-linux-arm64": "0.13.15", + "esbuild-linux-mips64le": "0.13.15", + "esbuild-linux-ppc64le": "0.13.15", + "esbuild-netbsd-64": "0.13.15", + "esbuild-openbsd-64": "0.13.15", + "esbuild-sunos-64": "0.13.15", + "esbuild-windows-32": "0.13.15", + "esbuild-windows-64": "0.13.15", + "esbuild-windows-arm64": "0.13.15" + } + }, + "esbuild-android-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz", + "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz", + "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz", + "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz", + "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz", + "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz", + "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz", + "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz", + "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz", + "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz", + "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz", + "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz", + "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz", + "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz", + "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz", + "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz", + "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz", + "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flatpickr": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", + "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" + }, + "fraction.js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "history": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", + "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mini-svg-data-uri": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "requires": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-flatpickr": { + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/react-flatpickr/-/react-flatpickr-3.10.7.tgz", + "integrity": "sha512-dJ7cZAayefqWJnX4Xe8Piy13oK2h4aeGCH9tz+D2iSNh+kbezUAWVMVCKdTqjsNBqTMS4v0DkfMy2CP2atNCTQ==", + "requires": { + "flatpickr": "^4.6.2", + "prop-types": "^15.5.10" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true + }, + "react-router": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.1.tgz", + "integrity": "sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg==", + "requires": { + "history": "^5.2.0" + } + }, + "react-router-dom": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.1.tgz", + "integrity": "sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA==", + "requires": { + "history": "^5.2.0", + "react-router": "6.2.1" + } + }, + "react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rollup": { + "version": "2.66.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.1.tgz", + "integrity": "sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "sass": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz", + "integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tailwindcss": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz", + "integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==", + "requires": { + "arg": "^5.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.21.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "vite": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.13.tgz", + "integrity": "sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==", + "dev": true, + "requires": { + "esbuild": "^0.13.12", + "fsevents": "~2.3.2", + "postcss": "^8.4.5", + "resolve": "^1.20.0", + "rollup": "^2.59.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..921c7f7 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "mosaic-react", + "version": "0.1.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@tailwindcss/forms": "^0.4.0", + "chart.js": "^3.5.0", + "chartjs-adapter-moment": "^1.0.0", + "moment": "^2.29.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-flatpickr": "^3.10.7", + "react-router-dom": "^6.2.1", + "react-transition-group": "^4.4.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^1.0.7", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.5", + "sass": "^1.49.0", + "tailwindcss": "^3.0.18", + "vite": "^2.7.2" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..1a8e929 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +import tailwind from 'tailwindcss' +import autoprefixer from 'autoprefixer' +import tailwindConfig from './src/css/tailwind.config.js' + +export default { + plugins: [tailwind(tailwindConfig), autoprefixer], +} \ No newline at end of file diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..f824337 --- /dev/null +++ b/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..ae07cfe --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,163 @@ +import React, { useEffect } from 'react'; +import { + Routes, + Route, + useLocation +} from 'react-router-dom'; + +import './css/style.scss'; + +import './charts/ChartjsConfig'; + +// Import pages +import Dashboard from './pages/Dashboard'; +import Analytics from './pages/Analytics'; +import Fintech from './pages/Fintech'; +import Customers from './pages/ecommerce/Customers'; +import Orders from './pages/ecommerce/Orders'; +import Invoices from './pages/ecommerce/Invoices'; +import Shop from './pages/ecommerce/Shop'; +import Shop2 from './pages/ecommerce/Shop2'; +import Product from './pages/ecommerce/Product'; +import Cart from './pages/ecommerce/Cart'; +import Cart2 from './pages/ecommerce/Cart2'; +import Cart3 from './pages/ecommerce/Cart3'; +import Pay from './pages/ecommerce/Pay'; +import Campaigns from './pages/Campaigns'; +import UsersTabs from './pages/community/UsersTabs'; +import UsersTiles from './pages/community/UsersTiles'; +import Profile from './pages/community/Profile'; +import Feed from './pages/community/Feed'; +import Forum from './pages/community/Forum'; +import ForumPost from './pages/community/ForumPost'; +import Meetups from './pages/community/Meetups'; +import MeetupsPost from './pages/community/MeetupsPost'; +import CreditCards from './pages/finance/CreditCards'; +import Transactions from './pages/finance/Transactions'; +import TransactionDetails from './pages/finance/TransactionDetails'; +import JobListing from './pages/job/JobListing'; +import JobPost from './pages/job/JobPost'; +import CompanyProfile from './pages/job/CompanyProfile'; +import Messages from './pages/Messages'; +import TasksKanban from './pages/tasks/TasksKanban'; +import TasksList from './pages/tasks/TasksList'; +import Inbox from './pages/Inbox'; +import Calendar from './pages/Calendar'; +import Account from './pages/settings/Account'; +import Notifications from './pages/settings/Notifications'; +import Apps from './pages/settings/Apps'; +import Plans from './pages/settings/Plans'; +import Billing from './pages/settings/Billing'; +import Feedback from './pages/settings/Feedback'; +import Changelog from './pages/utility/Changelog'; +import Roadmap from './pages/utility/Roadmap'; +import Faqs from './pages/utility/Faqs'; +import EmptyState from './pages/utility/EmptyState'; +import PageNotFound from './pages/utility/PageNotFound'; +import KnowledgeBase from './pages/utility/KnowledgeBase'; +import Signin from './pages/Signin'; +import Signup from './pages/Signup'; +import ResetPassword from './pages/ResetPassword'; +import Onboarding01 from './pages/Onboarding01'; +import Onboarding02 from './pages/Onboarding02'; +import Onboarding03 from './pages/Onboarding03'; +import Onboarding04 from './pages/Onboarding04'; +import ButtonPage from './pages/component/ButtonPage'; +import FormPage from './pages/component/FormPage'; +import DropdownPage from './pages/component/DropdownPage'; +import AlertPage from './pages/component/AlertPage'; +import ModalPage from './pages/component/ModalPage'; +import PaginationPage from './pages/component/PaginationPage'; +import TabsPage from './pages/component/TabsPage'; +import BreadcrumbPage from './pages/component/BreadcrumbPage'; +import BadgePage from './pages/component/BadgePage'; +import AvatarPage from './pages/component/AvatarPage'; +import TooltipPage from './pages/component/TooltipPage'; +import AccordionPage from './pages/component/AccordionPage'; +import IconsPage from './pages/component/IconsPage'; + +function App() { + + const location = useLocation(); + + useEffect(() => { + document.querySelector('html').style.scrollBehavior = 'auto' + window.scroll({ top: 0 }) + document.querySelector('html').style.scrollBehavior = '' + }, [location.pathname]); // triggered on route change + + return ( + <> + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +} + +export default App; diff --git a/src/charts/BarChart01.jsx b/src/charts/BarChart01.jsx new file mode 100644 index 0000000..a1a5cda --- /dev/null +++ b/src/charts/BarChart01.jsx @@ -0,0 +1,162 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatValue } from '../utils/Utils'; + +Chart.register(BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend); + +function BarChart01({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'bar', + data: data, + options: { + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 5, + callback: (value) => formatValue(value), + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [{ + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.forEach((item) => { + const li = document.createElement('li'); + li.style.marginRight = tailwindConfig().theme.margin[4]; + // Button element + const button = document.createElement('button'); + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[2]; + box.style.borderWidth = '3px'; + box.style.borderColor = item.fillStyle; + box.style.pointerEvents = 'none'; + // Label + const labelContainer = document.createElement('span'); + labelContainer.style.display = 'flex'; + labelContainer.style.alignItems = 'center'; + const value = document.createElement('span'); + value.style.color = tailwindConfig().theme.colors.slate[800]; + value.style.fontSize = tailwindConfig().theme.fontSize['3xl'][0]; + value.style.lineHeight = tailwindConfig().theme.fontSize['3xl'][1].lineHeight; + value.style.fontWeight = tailwindConfig().theme.fontWeight.bold; + value.style.marginRight = tailwindConfig().theme.margin[2]; + value.style.pointerEvents = 'none'; + const label = document.createElement('span'); + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const theValue = c.data.datasets[item.datasetIndex].data.reduce((a, b) => a + b, 0); + const valueText = document.createTextNode(formatValue(theValue)); + const labelText = document.createTextNode(item.text); + value.appendChild(valueText); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(labelContainer); + labelContainer.appendChild(value); + labelContainer.appendChild(label); + ul.appendChild(li); + }); + }, + }], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
+
    +
    +
    + +
    +
    + ); +} + +export default BarChart01; diff --git a/src/charts/BarChart02.jsx b/src/charts/BarChart02.jsx new file mode 100644 index 0000000..3f9d8fc --- /dev/null +++ b/src/charts/BarChart02.jsx @@ -0,0 +1,99 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { formatValue } from '../utils/Utils'; + +Chart.register(BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend); + +function BarChart02({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'bar', + data: data, + options: { + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + stacked: true, + grid: { + drawBorder: false, + }, + beginAtZero: true, + ticks: { + maxTicksLimit: 5, + callback: (value) => formatValue(value), + }, + }, + x: { + stacked: true, + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 200, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default BarChart02; \ No newline at end of file diff --git a/src/charts/BarChart03.jsx b/src/charts/BarChart03.jsx new file mode 100644 index 0000000..9e8165f --- /dev/null +++ b/src/charts/BarChart03.jsx @@ -0,0 +1,156 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatThousands } from '../utils/Utils'; + +Chart.register(BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend); + +function BarChart03({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'bar', + data: data, + options: { + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + stacked: true, + grid: { + drawBorder: false, + }, + beginAtZero: true, + ticks: { + maxTicksLimit: 5, + callback: (value) => formatThousands(value), + }, + }, + x: { + stacked: true, + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatThousands(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [{ + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current + if (!ul) return + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove() + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c) + items.forEach((item) => { + const li = document.createElement('li') + li.style.marginRight = tailwindConfig().theme.margin[3]; + // Button element + const button = document.createElement('button') + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)) + c.update() + }; + // Color box + const box = document.createElement('span') + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[2]; + box.style.borderWidth = '3px'; + box.style.borderColor = item.fillStyle; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span') + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const labelText = document.createTextNode(item.text) + label.appendChild(labelText) + li.appendChild(button) + button.appendChild(box) + button.appendChild(label) + ul.appendChild(li) + }) + }, + }], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
    +
    +
      +
      +
      +
      + +
      +
      + ); +} + +export default BarChart03; diff --git a/src/charts/BarChart04.jsx b/src/charts/BarChart04.jsx new file mode 100644 index 0000000..1b27d5e --- /dev/null +++ b/src/charts/BarChart04.jsx @@ -0,0 +1,149 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatThousands } from '../utils/Utils'; + +Chart.register(BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend); + +function BarChart04({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'bar', + data: data, + options: { + indexAxis: 'y', + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + }, + x: { + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 3, + align: 'end', + callback: (value) => formatThousands(value), + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatThousands(context.parsed.x), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [{ + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current + if (!ul) return + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove() + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c) + items.forEach((item) => { + const li = document.createElement('li') + li.style.marginRight = tailwindConfig().theme.margin[4] + // Button element + const button = document.createElement('button') + button.style.display = 'inline-flex' + button.style.alignItems = 'center' + button.style.opacity = item.hidden ? '.3' : '' + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)) + c.update() + } + // Color box + const box = document.createElement('span') + box.style.display = 'block' + box.style.width = tailwindConfig().theme.width[3] + box.style.height = tailwindConfig().theme.height[3] + box.style.borderRadius = tailwindConfig().theme.borderRadius.full + box.style.marginRight = tailwindConfig().theme.margin[2] + box.style.borderWidth = '3px' + box.style.borderColor = item.fillStyle + box.style.pointerEvents = 'none' + // Label + const label = document.createElement('span') + label.style.color = tailwindConfig().theme.colors.slate[500] + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0] + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight + const labelText = document.createTextNode(item.text) + label.appendChild(labelText) + li.appendChild(button) + button.appendChild(box) + button.appendChild(label) + ul.appendChild(li) + }) + }, + }], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
      +
        +
        +
        + +
        +
        + ); +} + +export default BarChart04; diff --git a/src/charts/BarChart05.jsx b/src/charts/BarChart05.jsx new file mode 100644 index 0000000..1967794 --- /dev/null +++ b/src/charts/BarChart05.jsx @@ -0,0 +1,157 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatValue } from '../utils/Utils'; + +Chart.register(BarController, BarElement, LinearScale, TimeScale, Tooltip, Legend); + +function BarChart05({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'bar', + data: data, + options: { + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 5, + callback: (value) => formatValue(value), + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [ + { + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.forEach((item) => { + const li = document.createElement('li'); + li.style.marginRight = tailwindConfig().theme.margin[4]; + // Button element + const button = document.createElement('button'); + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[2]; + box.style.borderWidth = '3px'; + box.style.borderColor = item.fillStyle; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span'); + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const labelText = document.createTextNode(item.text); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(label); + ul.appendChild(li); + }); + }, + }, + ], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
        +
        +
        +
        $1,347.09
        +
        Net
        +
        +
        +
          +
          +
          +
          +
          + +
          +
          + ); +} + +export default BarChart05; diff --git a/src/charts/BarChart06.jsx b/src/charts/BarChart06.jsx new file mode 100644 index 0000000..88c6c32 --- /dev/null +++ b/src/charts/BarChart06.jsx @@ -0,0 +1,164 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, BarController, BarElement, LinearScale, CategoryScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatValue } from '../utils/Utils'; + +// Import images +import revolutIcon from '../images/company-icon-01.svg'; +import hsbcIcon from '../images/company-icon-02.svg'; +import qontoIcon from '../images/company-icon-03.svg'; +import n26Icon from '../images/company-icon-04.svg'; + +Chart.register(BarController, BarElement, LinearScale, CategoryScale, Tooltip, Legend); +const images = [revolutIcon, hsbcIcon, qontoIcon, n26Icon]; + +function BarChart06({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'bar', + data: data, + options: { + indexAxis: 'y', + layout: { + padding: { + top: 12, + bottom: 16, + left: 72, + right: 20, + }, + }, + scales: { + y: { + grid: { + display: false, + drawBorder: false, + drawTicks: false, + }, + ticks: { + display: false, + }, + }, + x: { + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 3, + align: 'end', + callback: (value) => formatValue(value), + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.x), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [ + { + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.forEach((item) => { + const li = document.createElement('li'); + li.style.marginRight = tailwindConfig().theme.margin[4]; + // Button element + const button = document.createElement('button'); + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[2]; + box.style.borderWidth = '3px'; + box.style.borderColor = item.fillStyle; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span'); + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const labelText = document.createTextNode(item.text); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(label); + ul.appendChild(li); + }); + }, + afterDraw(c) { + const xAxis = c.scales.x; + const yAxis = c.scales.y; + yAxis.ticks.forEach((value, index) => { + const y = yAxis.getPixelForTick(index); + const image = new Image(); + image.src = images[index]; + c.ctx.drawImage(image, xAxis.left - 52, y - 18); + }); + }, + }, + ], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
          +
            +
            +
            + +
            +
            + ); +} + +export default BarChart06; diff --git a/src/charts/ChartjsConfig.jsx b/src/charts/ChartjsConfig.jsx new file mode 100644 index 0000000..acd2d7f --- /dev/null +++ b/src/charts/ChartjsConfig.jsx @@ -0,0 +1,42 @@ +// Import Chart.js +import { Chart, Tooltip } from 'chart.js'; +// Import Tailwind config +import { tailwindConfig } from '../utils/Utils'; + +Chart.register(Tooltip); + +// Define Chart.js default settings +Chart.defaults.font.family = '"Inter", sans-serif'; +Chart.defaults.font.weight = '500'; +Chart.defaults.color = tailwindConfig().theme.colors.slate[400]; +Chart.defaults.scale.grid.color = tailwindConfig().theme.colors.slate[100]; +Chart.defaults.plugins.tooltip.titleColor = tailwindConfig().theme.colors.slate[800]; +Chart.defaults.plugins.tooltip.bodyColor = tailwindConfig().theme.colors.slate[800]; +Chart.defaults.plugins.tooltip.backgroundColor = tailwindConfig().theme.colors.white; +Chart.defaults.plugins.tooltip.borderWidth = 1; +Chart.defaults.plugins.tooltip.borderColor = tailwindConfig().theme.colors.slate[200]; +Chart.defaults.plugins.tooltip.displayColors = false; +Chart.defaults.plugins.tooltip.mode = 'nearest'; +Chart.defaults.plugins.tooltip.intersect = false; +Chart.defaults.plugins.tooltip.position = 'nearest'; +Chart.defaults.plugins.tooltip.caretSize = 0; +Chart.defaults.plugins.tooltip.caretPadding = 20; +Chart.defaults.plugins.tooltip.cornerRadius = 4; +Chart.defaults.plugins.tooltip.padding = 8; + +// Register Chart.js plugin to add a bg option for chart area +Chart.register({ + id: 'chartAreaPlugin', + // eslint-disable-next-line object-shorthand + beforeDraw: (chart) => { + if (chart.config.options.chartArea && chart.config.options.chartArea.backgroundColor) { + const ctx = chart.canvas.getContext('2d'); + const { chartArea } = chart; + ctx.save(); + ctx.fillStyle = chart.config.options.chartArea.backgroundColor; + // eslint-disable-next-line max-len + ctx.fillRect(chartArea.left, chartArea.top, chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); + ctx.restore(); + } + }, +}); \ No newline at end of file diff --git a/src/charts/DoughnutChart.jsx b/src/charts/DoughnutChart.jsx new file mode 100644 index 0000000..5e41e44 --- /dev/null +++ b/src/charts/DoughnutChart.jsx @@ -0,0 +1,114 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, DoughnutController, ArcElement, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig } from '../utils/Utils'; + +Chart.register(DoughnutController, ArcElement, TimeScale, Tooltip); + +function DoughnutChart({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'doughnut', + data: data, + options: { + cutout: '80%', + layout: { + padding: 24, + }, + plugins: { + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [{ + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.forEach((item) => { + const li = document.createElement('li'); + li.style.margin = tailwindConfig().theme.margin[1]; + // Button element + const button = document.createElement('button'); + button.classList.add('btn-xs'); + button.style.backgroundColor = tailwindConfig().theme.colors.white; + button.style.borderWidth = tailwindConfig().theme.borderWidth[1]; + button.style.borderColor = tailwindConfig().theme.colors.slate[200]; + button.style.color = tailwindConfig().theme.colors.slate[500]; + button.style.boxShadow = tailwindConfig().theme.boxShadow.md; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.toggleDataVisibility(item.index, !item.index); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[2]; + box.style.height = tailwindConfig().theme.height[2]; + box.style.backgroundColor = item.fillStyle; + box.style.borderRadius = tailwindConfig().theme.borderRadius.sm; + box.style.marginRight = tailwindConfig().theme.margin[1]; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span'); + label.style.display = 'flex'; + label.style.alignItems = 'center'; + const labelText = document.createTextNode(item.text); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(label); + ul.appendChild(li); + }); + }, + }], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
            +
            + +
            +
            +
              +
              +
              + ); +} + +export default DoughnutChart; \ No newline at end of file diff --git a/src/charts/LineChart01.jsx b/src/charts/LineChart01.jsx new file mode 100644 index 0000000..58dd01d --- /dev/null +++ b/src/charts/LineChart01.jsx @@ -0,0 +1,76 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart01({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + chartArea: { + backgroundColor: tailwindConfig().theme.colors.slate[50], + }, + layout: { + padding: 20, + }, + scales: { + y: { + display: false, + beginAtZero: true, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + }, + display: false, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart01; \ No newline at end of file diff --git a/src/charts/LineChart02.jsx b/src/charts/LineChart02.jsx new file mode 100644 index 0000000..371d15b --- /dev/null +++ b/src/charts/LineChart02.jsx @@ -0,0 +1,153 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart02({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: 20, + }, + scales: { + y: { + grid: { + drawBorder: false, + beginAtZero: true, + }, + ticks: { + maxTicksLimit: 5, + callback: (value) => formatValue(value), + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [{ + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.slice(0, 2).forEach((item) => { + const li = document.createElement('li'); + li.style.marginLeft = tailwindConfig().theme.margin[3]; + // Button element + const button = document.createElement('button'); + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[2]; + box.style.borderWidth = '3px'; + box.style.borderColor = c.data.datasets[item.datasetIndex].borderColor; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span'); + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const labelText = document.createTextNode(item.text); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(label); + ul.appendChild(li); + }); + }, + }], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
              +
              +
              +
              $1,482
              +
              -22%
              +
              +
              +
                +
                +
                +
                + {/* Chart built with Chart.js 3 */} +
                + +
                +
                + ); +} + +export default LineChart02; \ No newline at end of file diff --git a/src/charts/LineChart03.jsx b/src/charts/LineChart03.jsx new file mode 100644 index 0000000..9a4a8c8 --- /dev/null +++ b/src/charts/LineChart03.jsx @@ -0,0 +1,88 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { formatThousands } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart03({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: 20, + }, + scales: { + y: { + beginAtZero: true, + grid: { + drawBorder: false, + }, + ticks: { + callback: (value) => formatThousands(value), + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatThousands(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart03; \ No newline at end of file diff --git a/src/charts/LineChart04.jsx b/src/charts/LineChart04.jsx new file mode 100644 index 0000000..ef8d843 --- /dev/null +++ b/src/charts/LineChart04.jsx @@ -0,0 +1,78 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatThousands } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart04({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + chartArea: { + backgroundColor: tailwindConfig().theme.colors.slate[50], + }, + layout: { + padding: { + left: 20, + right: 20, + }, + }, + scales: { + y: { + display: false, + beginAtZero: true, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + }, + display: false, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatThousands(context.parsed.y), + }, + }, + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart04; \ No newline at end of file diff --git a/src/charts/LineChart05.jsx b/src/charts/LineChart05.jsx new file mode 100644 index 0000000..dcd7d5e --- /dev/null +++ b/src/charts/LineChart05.jsx @@ -0,0 +1,157 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart05({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: 20, + }, + scales: { + y: { + beginAtZero: true, + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 7, + callback: (value) => `${value}%`, + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => `${context.parsed.y}%`, + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [ + { + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.forEach((item) => { + const li = document.createElement('li'); + li.style.marginLeft = tailwindConfig().theme.margin[3]; + // Button element + const button = document.createElement('button'); + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.setDatasetVisibility(item.datasetIndex, !c.isDatasetVisible(item.datasetIndex)); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[2]; + box.style.borderWidth = '3px'; + box.style.borderColor = c.data.datasets[item.datasetIndex].borderColor; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span'); + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const labelText = document.createTextNode(item.text); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(label); + ul.appendChild(li); + }); + }, + }, + ], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + +
                +
                +
                +
                244.7%
                +
                + 17.4% AVG +
                +
                +
                +
                  +
                +
                +
                + {/* Chart built with Chart.js 3 */} +
                + +
                +
                + ); +} + +export default LineChart05; \ No newline at end of file diff --git a/src/charts/LineChart06.jsx b/src/charts/LineChart06.jsx new file mode 100644 index 0000000..a474fea --- /dev/null +++ b/src/charts/LineChart06.jsx @@ -0,0 +1,94 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart06({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + beginAtZero: true, + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 7, + callback: (value) => formatValue(value), + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + displayFormats: { + month: 'MMM YY', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart06; \ No newline at end of file diff --git a/src/charts/LineChart07.jsx b/src/charts/LineChart07.jsx new file mode 100644 index 0000000..babdd05 --- /dev/null +++ b/src/charts/LineChart07.jsx @@ -0,0 +1,86 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, CategoryScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, CategoryScale, Tooltip); + +function LineChart07({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: { + top: 12, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + beginAtZero: true, + grid: { + drawBorder: false, + }, + ticks: { + maxTicksLimit: 7, + callback: (value) => formatValue(value), + }, + }, + x: { + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + align: 'end', + }, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart07; \ No newline at end of file diff --git a/src/charts/LineChart08.jsx b/src/charts/LineChart08.jsx new file mode 100644 index 0000000..2680da5 --- /dev/null +++ b/src/charts/LineChart08.jsx @@ -0,0 +1,84 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart08({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: { + top: 16, + bottom: 16, + left: 20, + right: 20, + }, + }, + scales: { + y: { + beginAtZero: true, + grid: { + drawBorder: false, + drawTicks: false, + }, + ticks: { + maxTicksLimit: 2, + display: false, + }, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + }, + display: false, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart08; \ No newline at end of file diff --git a/src/charts/LineChart09.jsx b/src/charts/LineChart09.jsx new file mode 100644 index 0000000..84ba92b --- /dev/null +++ b/src/charts/LineChart09.jsx @@ -0,0 +1,69 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function LineChart09({ + data, + width, + height +}) { + + const canvas = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + scales: { + y: { + display: false, + beginAtZero: true, + }, + x: { + type: 'time', + time: { + parser: 'MM-DD-YYYY', + unit: 'month', + }, + display: false, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: () => false, // Disable tooltip title + label: (context) => formatValue(context.parsed.y), + }, + }, + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + maintainAspectRatio: false, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + ); +} + +export default LineChart09; \ No newline at end of file diff --git a/src/charts/PieChart.jsx b/src/charts/PieChart.jsx new file mode 100644 index 0000000..aee10f6 --- /dev/null +++ b/src/charts/PieChart.jsx @@ -0,0 +1,117 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, PieController, ArcElement, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig } from '../utils/Utils'; + +Chart.register(PieController, ArcElement, TimeScale, Tooltip); + +function PieChart({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'pie', + data: data, + options: { + layout: { + padding: { + top: 4, + bottom: 4, + left: 24, + right: 24, + }, + }, + plugins: { + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 200, + }, + maintainAspectRatio: false, + }, + plugins: [ + { + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current; + if (!ul) return; + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove(); + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c); + items.forEach((item) => { + const li = document.createElement('li'); + li.style.margin = tailwindConfig().theme.margin[1.5]; + // Button element + const button = document.createElement('button'); + button.style.display = 'inline-flex'; + button.style.alignItems = 'center'; + button.style.opacity = item.hidden ? '.3' : ''; + button.onclick = () => { + c.toggleDataVisibility(item.index, !item.index); + c.update(); + }; + // Color box + const box = document.createElement('span'); + box.style.display = 'block'; + box.style.width = tailwindConfig().theme.width[3]; + box.style.height = tailwindConfig().theme.height[3]; + box.style.borderRadius = tailwindConfig().theme.borderRadius.full; + box.style.marginRight = tailwindConfig().theme.margin[1.5]; + box.style.borderWidth = '3px'; + box.style.borderColor = item.fillStyle; + box.style.pointerEvents = 'none'; + // Label + const label = document.createElement('span'); + label.style.color = tailwindConfig().theme.colors.slate[500]; + label.style.fontSize = tailwindConfig().theme.fontSize.sm[0]; + label.style.lineHeight = tailwindConfig().theme.fontSize.sm[1].lineHeight; + const labelText = document.createTextNode(item.text); + label.appendChild(labelText); + li.appendChild(button); + button.appendChild(box); + button.appendChild(label); + ul.appendChild(li); + }); + }, + }, + ], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
                +
                + +
                +
                +
                  +
                +
                + ); +} + +export default PieChart; \ No newline at end of file diff --git a/src/charts/PolarChart.jsx b/src/charts/PolarChart.jsx new file mode 100644 index 0000000..8b0a38c --- /dev/null +++ b/src/charts/PolarChart.jsx @@ -0,0 +1,113 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, PolarAreaController, RadialLinearScale, Tooltip, Legend, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig } from '../utils/Utils'; + +Chart.register(PolarAreaController, RadialLinearScale, Tooltip, Legend); + +function PolarChart({ + data, + width, + height +}) { + + const canvas = useRef(null); + const legend = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'polarArea', + data: data, + options: { + layout: { + padding: 24, + }, + plugins: { + legend: { + display: false, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: { + duration: 500, + }, + maintainAspectRatio: false, + resizeDelay: 200, + }, + plugins: [{ + id: 'htmlLegend', + afterUpdate(c, args, options) { + const ul = legend.current + if (!ul) return + // Remove old legend items + while (ul.firstChild) { + ul.firstChild.remove() + } + // Reuse the built-in legendItems generator + const items = c.options.plugins.legend.labels.generateLabels(c) + items.forEach((item) => { + const li = document.createElement('li') + li.style.margin = tailwindConfig().theme.margin[1] + // Button element + const button = document.createElement('button') + button.classList.add('btn-xs') + button.style.backgroundColor = tailwindConfig().theme.colors.white + button.style.borderWidth = tailwindConfig().theme.borderWidth[1] + button.style.borderColor = tailwindConfig().theme.colors.slate[200] + button.style.color = tailwindConfig().theme.colors.slate[500] + button.style.boxShadow = tailwindConfig().theme.boxShadow.md + button.style.opacity = item.hidden ? '.3' : '' + button.onclick = () => { + c.toggleDataVisibility(item.index, !item.index) + c.update() + } + // Color box + const box = document.createElement('span') + box.style.display = 'block' + box.style.width = tailwindConfig().theme.width[2] + box.style.height = tailwindConfig().theme.height[2] + box.style.backgroundColor = item.fillStyle + box.style.borderRadius = tailwindConfig().theme.borderRadius.sm + box.style.marginRight = tailwindConfig().theme.margin[1] + box.style.pointerEvents = 'none' + // Label + const label = document.createElement('span') + label.style.display = 'flex' + label.style.alignItems = 'center' + const labelText = document.createTextNode(item.text) + label.appendChild(labelText) + li.appendChild(button) + button.appendChild(box) + button.appendChild(label) + ul.appendChild(li) + }) + }, + }], + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
                +
                + +
                +
                +
                  +
                  +
                  + ); +} + +export default PolarChart; \ No newline at end of file diff --git a/src/charts/RealtimeChart.jsx b/src/charts/RealtimeChart.jsx new file mode 100644 index 0000000..f9ae900 --- /dev/null +++ b/src/charts/RealtimeChart.jsx @@ -0,0 +1,120 @@ +import React, { useRef, useEffect } from 'react'; + +import { + Chart, LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip, +} from 'chart.js'; +import 'chartjs-adapter-moment'; + +// Import utilities +import { tailwindConfig, formatValue } from '../utils/Utils'; + +Chart.register(LineController, LineElement, Filler, PointElement, LinearScale, TimeScale, Tooltip); + +function RealtimeChart({ + data, + width, + height +}) { + + const canvas = useRef(null); + const chartValue = useRef(null); + const chartDeviation = useRef(null); + + useEffect(() => { + const ctx = canvas.current; + // eslint-disable-next-line no-unused-vars + const chart = new Chart(ctx, { + type: 'line', + data: data, + options: { + layout: { + padding: 20, + }, + scales: { + y: { + grid: { + drawBorder: false, + }, + suggestedMin: 30, + suggestedMax: 80, + ticks: { + maxTicksLimit: 5, + callback: (value) => formatValue(value), + }, + }, + x: { + type: 'time', + time: { + parser: 'hh:mm:ss', + unit: 'second', + tooltipFormat: 'MMM DD, H:mm:ss a', + displayFormats: { + second: 'H:mm:ss', + }, + }, + grid: { + display: false, + drawBorder: false, + }, + ticks: { + autoSkipPadding: 48, + maxRotation: 0, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + titleFont: { + weight: '600', + }, + callbacks: { + label: (context) => formatValue(context.parsed.y), + }, + }, + }, + interaction: { + intersect: false, + mode: 'nearest', + }, + animation: false, + maintainAspectRatio: false, + resizeDelay: 200, + }, + }); + return () => chart.destroy(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [data]); + + // Update header values + useEffect(() => { + const currentValue = data.datasets[0].data[data.datasets[0].data.length - 1]; + const previousValue = data.datasets[0].data[data.datasets[0].data.length - 2]; + const diff = ((currentValue - previousValue) / previousValue) * 100; + chartValue.current.innerHTML = data.datasets[0].data[data.datasets[0].data.length - 1]; + if (diff < 0) { + chartDeviation.current.style.backgroundColor = tailwindConfig().theme.colors.yellow[500]; + } else { + chartDeviation.current.style.backgroundColor = tailwindConfig().theme.colors.emerald[500]; + } + chartDeviation.current.innerHTML = `${diff > 0 ? '+' : ''}${diff.toFixed(2)}%`; + }, [data]); + + return ( + +
                  +
                  +
                  $57.81
                  +
                  +
                  +
                  +
                  + +
                  +
                  + ); +} + +export default RealtimeChart; \ No newline at end of file diff --git a/src/components/AccordionBasic.jsx b/src/components/AccordionBasic.jsx new file mode 100644 index 0000000..75c668e --- /dev/null +++ b/src/components/AccordionBasic.jsx @@ -0,0 +1,26 @@ +import React, { useState } from 'react'; + +function AccordionBasic(props) { + + const [open, setOpen] = useState(false); + + return ( +
                  + +
                  + {props.children} +
                  +
                  + ); +} + +export default AccordionBasic; diff --git a/src/components/AccordionTableItem.jsx b/src/components/AccordionTableItem.jsx new file mode 100644 index 0000000..218ce2c --- /dev/null +++ b/src/components/AccordionTableItem.jsx @@ -0,0 +1,73 @@ +import React, { useState } from 'react'; + +function AccordionTableItem(props) { + + const [open, setOpen] = useState(false); + + return ( + + + +
                  +
                  + {props.customer} +
                  +
                  {props.customer}
                  +
                  + + +
                  {props.total}
                  + + +
                  {props.status}
                  + + +
                  {props.items}
                  + + +
                  {props.location}
                  + + +
                  + + + +
                  {props.type}
                  +
                  + + +
                  + +
                  + + + {/* + Example of content revealing when clicking the button on the right side: + Note that you must set a "colSpan" attribute on the element, + and it should match the number of columns in your table + */} + + +
                  + + + +
                  {props.description}
                  +
                  + + + + ); +} + +export default AccordionTableItem; diff --git a/src/components/AccordionTableRichItem.jsx b/src/components/AccordionTableRichItem.jsx new file mode 100644 index 0000000..682c251 --- /dev/null +++ b/src/components/AccordionTableRichItem.jsx @@ -0,0 +1,66 @@ +import React, { useState } from 'react'; + +function AccordionTableRichItem(props) { + + const [open, setOpen] = useState(false); + + return ( + + + +
                  +
                  + {props.customer} +
                  +
                  {props.customer}
                  +
                  + + +
                  {props.email}
                  + + +
                  {props.location}
                  + + +
                  {props.date}
                  + + +
                  {props.amount}
                  + + +
                  + +
                  + + + {/* + Example of content revealing when clicking the button on the right side: + Note that you must set a "colSpan" attribute on the element, + and it should match the number of columns in your table + */} + + +
                  +
                  +
                  {props.descriptionTitle}
                  +
                  {props.descriptionBody}
                  +
                  + +
                  + + + + ); +} + +export default AccordionTableRichItem; diff --git a/src/components/Banner.jsx b/src/components/Banner.jsx new file mode 100644 index 0000000..19e78e9 --- /dev/null +++ b/src/components/Banner.jsx @@ -0,0 +1,79 @@ +import React from 'react'; + +function Banner({ + children, + className, + type, + open, + setOpen +}) { + + const typeIcon = (type) => { + switch (type) { + case 'warning': + return ( + + + + ); + case 'error': + return ( + + + + ); + case 'success': + return ( + + + + ); + default: + return ( + + + + ); + } + }; + + const typeColor = (type) => { + switch (type) { + case 'warning': + return 'bg-amber-500'; + case 'error': + return 'bg-rose-500'; + case 'success': + return 'bg-emerald-500'; + default: + return 'bg-indigo-500'; + } + }; + + return ( + <> + {open && +
                  +
                  +
                  +
                  + {typeIcon(type)} +
                  + {children} +
                  +
                  + +
                  +
                  +
                  + } + + ); +} + +export default Banner; diff --git a/src/components/Banner2.jsx b/src/components/Banner2.jsx new file mode 100644 index 0000000..ffe88ce --- /dev/null +++ b/src/components/Banner2.jsx @@ -0,0 +1,79 @@ +import React from 'react'; + +function Banner2({ + children, + className, + type, + open, + setOpen +}) { + + const typeIcon = (type) => { + switch (type) { + case 'warning': + return ( + + + + ); + case 'error': + return ( + + + + ); + case 'success': + return ( + + + + ); + default: + return ( + + + + ); + } + }; + + const typeColor = (type) => { + switch (type) { + case 'warning': + return 'bg-amber-100 border-amber-200 text-amber-600'; + case 'error': + return 'bg-rose-100 border-rose-200 text-rose-600'; + case 'success': + return 'bg-emerald-100 border-emerald-200 text-emerald-600'; + default: + return 'bg-indigo-100 border-indigo-200 text-indigo-500'; + } + }; + + return ( + <> + {open && +
                  +
                  +
                  +
                  + {typeIcon(type)} +
                  + {children} +
                  +
                  + +
                  +
                  +
                  + } + + ); +} + +export default Banner2; diff --git a/src/components/DateSelect.jsx b/src/components/DateSelect.jsx new file mode 100644 index 0000000..cd86a69 --- /dev/null +++ b/src/components/DateSelect.jsx @@ -0,0 +1,116 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DateSelect() { + + const options = [ + { + id: 0, + period: 'Today' + }, + { + id: 1, + period: 'Last 7 Days' + }, + { + id: 2, + period: 'Last Month' + }, + { + id: 3, + period: 'Last 12 Months' + }, + { + id: 4, + period: 'All Time' + } + ]; + + const [dropdownOpen, setDropdownOpen] = useState(false); + const [selected, setSelected] = useState(2); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + +
                  setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > + { + options.map(option => { + return ( + + ) + }) + } +
                  +
                  +
                  + ); +} + +export default DateSelect; diff --git a/src/components/Datepicker.jsx b/src/components/Datepicker.jsx new file mode 100644 index 0000000..ad0edc9 --- /dev/null +++ b/src/components/Datepicker.jsx @@ -0,0 +1,38 @@ +import React from 'react'; +import Flatpickr from 'react-flatpickr'; + +function Datepicker({ + align +}) { + + const options = { + mode: 'range', + static: true, + monthSelectorType: 'static', + dateFormat: 'M j, Y', + defaultDate: [new Date().setDate(new Date().getDate() - 6), new Date()], + prevArrow: '', + nextArrow: '', + onReady: (selectedDates, dateStr, instance) => { + instance.element.value = dateStr.replace('to', '-'); + const customClass = (align) ? align : ''; + instance.calendarContainer.classList.add(`flatpickr-${customClass}`); + }, + onChange: (selectedDates, dateStr, instance) => { + instance.element.value = dateStr.replace('to', '-'); + }, + } + + return ( +
                  + +
                  + + + +
                  +
                  + ); +} + +export default Datepicker; diff --git a/src/components/DropdownClassic.jsx b/src/components/DropdownClassic.jsx new file mode 100644 index 0000000..0e90187 --- /dev/null +++ b/src/components/DropdownClassic.jsx @@ -0,0 +1,113 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DropdownClassic() { + + const options = [ + { + id: 0, + period: 'Today' + }, + { + id: 1, + period: 'Last 7 Days' + }, + { + id: 2, + period: 'Last Month' + }, + { + id: 3, + period: 'Last 12 Months' + }, + { + id: 4, + period: 'All Time' + } + ]; + + const [dropdownOpen, setDropdownOpen] = useState(false); + const [selected, setSelected] = useState(2); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + +
                  setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > + { + options.map(option => { + return ( + + ) + }) + } +
                  +
                  +
                  + ); +} + +export default DropdownClassic; diff --git a/src/components/DropdownEditMenu.jsx b/src/components/DropdownEditMenu.jsx new file mode 100644 index 0000000..ece1413 --- /dev/null +++ b/src/components/DropdownEditMenu.jsx @@ -0,0 +1,75 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DropdownEditMenu({ + children, + align, + ...rest +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + +
                    setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > + {children} +
                  +
                  +
                  + ); +} + +export default DropdownEditMenu; \ No newline at end of file diff --git a/src/components/DropdownFilter.jsx b/src/components/DropdownFilter.jsx new file mode 100644 index 0000000..11bb4bd --- /dev/null +++ b/src/components/DropdownFilter.jsx @@ -0,0 +1,115 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DropdownFilter({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + +
                  +
                  Filters
                  +
                    +
                  • + +
                  • +
                  • + +
                  • +
                  • + +
                  • +
                  • + +
                  • +
                  • + +
                  • +
                  • + +
                  • +
                  +
                  +
                    +
                  • + +
                  • +
                  • + +
                  • +
                  +
                  +
                  +
                  +
                  + ); +} + +export default DropdownFilter; diff --git a/src/components/DropdownFull.jsx b/src/components/DropdownFull.jsx new file mode 100644 index 0000000..572e660 --- /dev/null +++ b/src/components/DropdownFull.jsx @@ -0,0 +1,109 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DropdownFull() { + + const options = [ + { + id: 0, + period: 'Most Popular' + }, + { + id: 1, + period: 'Newest' + }, + { + id: 2, + period: 'Lowest Price' + }, + { + id: 3, + period: 'Highest Price' + } + ]; + + const [dropdownOpen, setDropdownOpen] = useState(false); + const [selected, setSelected] = useState(0); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + +
                  setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > + { + options.map(option => { + return ( + + ) + }) + } +
                  +
                  +
                  + ); +} + +export default DropdownFull; diff --git a/src/components/DropdownHelp.jsx b/src/components/DropdownHelp.jsx new file mode 100644 index 0000000..9c8cb78 --- /dev/null +++ b/src/components/DropdownHelp.jsx @@ -0,0 +1,111 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { Link } from 'react-router-dom'; +import Transition from '../utils/Transition'; + +function DropdownHelp({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + + +
                  setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > +
                  Need help?
                  +
                    +
                  • + setDropdownOpen(!dropdownOpen)} + > + + + + + Documentation + +
                  • +
                  • + setDropdownOpen(!dropdownOpen)} + > + + + + Support Site + +
                  • +
                  • + setDropdownOpen(!dropdownOpen)} + > + + + + Contact us + +
                  • +
                  +
                  +
                  +
                  + ) +} + +export default DropdownHelp; \ No newline at end of file diff --git a/src/components/DropdownNotifications.jsx b/src/components/DropdownNotifications.jsx new file mode 100644 index 0000000..f97f580 --- /dev/null +++ b/src/components/DropdownNotifications.jsx @@ -0,0 +1,106 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { Link } from 'react-router-dom'; +import Transition from '../utils/Transition'; + +function DropdownNotifications({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + + +
                  setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > +
                  Notifications
                  +
                    +
                  • + setDropdownOpen(!dropdownOpen)} + > + 📣 Edit your information in a swipe Sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim. + Feb 12, 2021 + +
                  • +
                  • + setDropdownOpen(!dropdownOpen)} + > + 📣 Edit your information in a swipe Sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim. + Feb 9, 2021 + +
                  • +
                  • + setDropdownOpen(!dropdownOpen)} + > + 🚀Say goodbye to paper receipts! Sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim. + Jan 24, 2020 + +
                  • +
                  +
                  +
                  +
                  + ) +} + +export default DropdownNotifications; \ No newline at end of file diff --git a/src/components/DropdownProfile.jsx b/src/components/DropdownProfile.jsx new file mode 100644 index 0000000..4332b2d --- /dev/null +++ b/src/components/DropdownProfile.jsx @@ -0,0 +1,100 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { Link } from 'react-router-dom'; +import Transition from '../utils/Transition'; + +import UserAvatar from '../images/user-avatar-32.png'; + +function DropdownProfile({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + + +
                  setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > +
                  +
                  Acme Inc.
                  +
                  Administrator
                  +
                  +
                    +
                  • + setDropdownOpen(!dropdownOpen)} + > + Settings + +
                  • +
                  • + setDropdownOpen(!dropdownOpen)} + > + Sign Out + +
                  • +
                  +
                  +
                  +
                  + ) +} + +export default DropdownProfile; \ No newline at end of file diff --git a/src/components/DropdownSort.jsx b/src/components/DropdownSort.jsx new file mode 100644 index 0000000..b509413 --- /dev/null +++ b/src/components/DropdownSort.jsx @@ -0,0 +1,90 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DropdownSort({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + + +
                  setDropdownOpen(true)} onBlur={() => setDropdownOpen(false)}> + +
                  +
                  +
                  + ); +} + +export default DropdownSort; \ No newline at end of file diff --git a/src/components/DropdownSwitch.jsx b/src/components/DropdownSwitch.jsx new file mode 100644 index 0000000..8b64960 --- /dev/null +++ b/src/components/DropdownSwitch.jsx @@ -0,0 +1,110 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +import DropdownImage from '../images/user-avatar-32.png'; +import DropdownImage01 from '../images/channel-01.png'; +import DropdownImage02 from '../images/channel-02.png'; +import DropdownImage03 from '../images/channel-03.png'; + +function DropdownSwitch({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + + + +
                  + ) +} + +export default DropdownSwitch; \ No newline at end of file diff --git a/src/components/DropdownTransaction.jsx b/src/components/DropdownTransaction.jsx new file mode 100644 index 0000000..0b77c3c --- /dev/null +++ b/src/components/DropdownTransaction.jsx @@ -0,0 +1,90 @@ +import React, { useState, useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function DropdownTransaction({ + align +}) { + + const [dropdownOpen, setDropdownOpen] = useState(false); + + const trigger = useRef(null); + const dropdown = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!dropdown.current) return; + if (!dropdownOpen || dropdown.current.contains(target) || trigger.current.contains(target)) return; + setDropdownOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!dropdownOpen || keyCode !== 27) return; + setDropdownOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
                  + + + +
                  setDropdownOpen(true)} onBlur={() => setDropdownOpen(false)}> + +
                  +
                  +
                  + ); +} + +export default DropdownTransaction; \ No newline at end of file diff --git a/src/components/ModalAction.jsx b/src/components/ModalAction.jsx new file mode 100644 index 0000000..40229c3 --- /dev/null +++ b/src/components/ModalAction.jsx @@ -0,0 +1,80 @@ +import React, { useRef, useEffect } from 'react'; +import Transition from '../utils/Transition'; + +function ModalAction({ + children, + id, + modalOpen, + setModalOpen +}) { + + const modalContent = useRef(null); + + // close on click outside + useEffect(() => { + const clickHandler = ({ target }) => { + if (!modalOpen || modalContent.current.contains(target)) return + setModalOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }) => { + if (!modalOpen || keyCode !== 27) return; + setModalOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( + <> + {/* Modal backdrop */} +