From eeede39db305d048132246ab77700e3b0bcd7ca8 Mon Sep 17 00:00:00 2001 From: severinlandolt Date: Wed, 5 Jun 2024 18:30:31 +0200 Subject: [PATCH] add content --- .eslintrc.json | 3 + .github/ISSUE_TEMPLATE/bug-report.yml | 77 + .github/ISSUE_TEMPLATE/config.yml | 5 + .gitignore | 36 + .prettierrc | 10 + .vscode/settings.json | 10 + LICENSE.md | 176 + README.md | 74 + next.config.mjs | 15 + package.json | 48 + pnpm-lock.yaml | 4890 +++++++++++++++++ postcss.config.mjs | 8 + public/DatabaseLogo.tsx | 77 + public/og_github.jpg | Bin 0 -> 247906 bytes src/app/(main)/details/page.tsx | 36 + src/app/(main)/layout.tsx | 13 + src/app/(main)/overview/page.tsx | 218 + src/app/favicon.ico | Bin 0 -> 285478 bytes src/app/globals.css | 3 + src/app/layout.tsx | 60 + src/app/not-found.tsx | 33 + src/app/settings/layout.tsx | 14 + src/app/settings/page.tsx | 33 + src/app/siteConfig.ts | 16 + src/components/Badge.tsx | 59 + src/components/Button.tsx | 144 + src/components/Calendar.tsx | 319 ++ src/components/DatePicker.tsx | 1198 ++++ src/components/Dialog.tsx | 149 + src/components/Drawer.tsx | 194 + src/components/Dropdown.tsx | 387 ++ src/components/Input.tsx | 142 + src/components/Label.tsx | 36 + src/components/LineChart.tsx | 934 ++++ src/components/Popover.tsx | 109 + src/components/ProgressBar.tsx | 108 + src/components/RadioCard.tsx | 93 + src/components/Select.tsx | 311 ++ src/components/ui/icons/ArrowAnimated.tsx | 28 + src/components/ui/icons/TremorPlaceholder.tsx | 62 + .../ui/navigation/DropdownUserProfile.tsx | 126 + .../ui/navigation/MobileSidebar.tsx | 145 + .../ui/navigation/ModalAddWorkspace.tsx | 202 + .../navigation/SidebarWorkspacesDropdown.tsx | 229 + src/components/ui/navigation/UserProfile.tsx | 57 + src/components/ui/navigation/sidebar.tsx | 132 + .../ui/overview/DashboardCategoryBarCard.tsx | 85 + .../ui/overview/DashboardChartCard.tsx | 159 + .../ui/overview/DashboardFilterbar.tsx | 49 + .../ui/overview/DashboardProgressBarCard.tsx | 77 + src/data/data.ts | 577 ++ src/data/generateData.js | 140 + src/data/overview-data.ts | 4531 +++++++++++++++ src/data/schema.ts | 18 + src/lib/chartUtils.ts | 120 + src/lib/useOnWindowResize.tsx | 15 + src/lib/utils.ts | 77 + tailwind.config.ts | 65 + tsconfig.json | 26 + 59 files changed, 16958 insertions(+) create mode 100644 .eslintrc.json create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 .vscode/settings.json create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 next.config.mjs create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.mjs create mode 100644 public/DatabaseLogo.tsx create mode 100644 public/og_github.jpg create mode 100644 src/app/(main)/details/page.tsx create mode 100644 src/app/(main)/layout.tsx create mode 100644 src/app/(main)/overview/page.tsx create mode 100644 src/app/favicon.ico create mode 100644 src/app/globals.css create mode 100644 src/app/layout.tsx create mode 100644 src/app/not-found.tsx create mode 100644 src/app/settings/layout.tsx create mode 100644 src/app/settings/page.tsx create mode 100644 src/app/siteConfig.ts create mode 100644 src/components/Badge.tsx create mode 100644 src/components/Button.tsx create mode 100644 src/components/Calendar.tsx create mode 100644 src/components/DatePicker.tsx create mode 100644 src/components/Dialog.tsx create mode 100644 src/components/Drawer.tsx create mode 100644 src/components/Dropdown.tsx create mode 100644 src/components/Input.tsx create mode 100644 src/components/Label.tsx create mode 100644 src/components/LineChart.tsx create mode 100644 src/components/Popover.tsx create mode 100644 src/components/ProgressBar.tsx create mode 100644 src/components/RadioCard.tsx create mode 100644 src/components/Select.tsx create mode 100644 src/components/ui/icons/ArrowAnimated.tsx create mode 100644 src/components/ui/icons/TremorPlaceholder.tsx create mode 100644 src/components/ui/navigation/DropdownUserProfile.tsx create mode 100644 src/components/ui/navigation/MobileSidebar.tsx create mode 100644 src/components/ui/navigation/ModalAddWorkspace.tsx create mode 100644 src/components/ui/navigation/SidebarWorkspacesDropdown.tsx create mode 100644 src/components/ui/navigation/UserProfile.tsx create mode 100644 src/components/ui/navigation/sidebar.tsx create mode 100644 src/components/ui/overview/DashboardCategoryBarCard.tsx create mode 100644 src/components/ui/overview/DashboardChartCard.tsx create mode 100644 src/components/ui/overview/DashboardFilterbar.tsx create mode 100644 src/components/ui/overview/DashboardProgressBarCard.tsx create mode 100644 src/data/data.ts create mode 100644 src/data/generateData.js create mode 100644 src/data/overview-data.ts create mode 100644 src/data/schema.ts create mode 100644 src/lib/chartUtils.ts create mode 100644 src/lib/useOnWindowResize.tsx create mode 100644 src/lib/utils.ts create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..ecd7223 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,77 @@ +name: "\U0001F41E Bug report" +description: Create a report to help us improve +title: "[Bug]: " +body: + - type: markdown + attributes: + value: | + **Before submitting a bug report** + + This repository is reserved for bug reports. If you have a usage question, you can: + + - Read the [documentation](https://raw.tremor.so/docs/getting-started/installation) + - Ask questions on [Slack](https://join.slack.com/t/tremor-community/shared_invite/zt-1u8jqmcmq-Fdr9B6MbnO7u8FkGh~2Ylg) + + - type: input + id: url + attributes: + label: URL + description: | + Please insert the URL of the affected page + placeholder: URL + validations: + required: true + - type: textarea + id: description + attributes: + label: Bug description + description: | + What do we need to make the bug happen? Clear and concise description or instructions are important for us to be able to triage your issue in a timely manner. Note that you can use [Markdown](https://guides.github.com/features/mastering-markdown/) to format lists and code. + validations: + required: true + - type: textarea + id: expected + attributes: + label: What is expected? + validations: + required: true + - type: textarea + id: actually-happening + attributes: + label: What is actually happening? + validations: + required: false + - type: textarea + attributes: + label: Screenshots + description: | + You can attach images or files by clicking this area to highlight it and then dragging files in. + validations: + required: false + - type: dropdown + id: browsers + attributes: + label: What browser(s) are you seeing the problem on? + multiple: true + options: + - Chrome + - Microsoft Edge + - Safari + - Firefox + - Vivaldi + - Brave + - Other + - type: dropdown + id: device + attributes: + label: What device(s) are you seeing the problem on? (if applicable) + multiple: true + options: + - Phone + - Desktop + - Tablet + - type: textarea + id: additional-comments + attributes: + label: Any additional comments? + description: Links? References? Anything that will give us more context about the issue you are encountering! diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9675de5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Get help – Join our Slack Community + url: https://join.slack.com/t/tremor-community/shared_invite/zt-1u8jqmcmq-Fdr9B6MbnO7u8FkGh~2Ylg + about: Please ask and answer usage and technical questions here. \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd3dbb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..bc9cb6d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "printWidth": 80, + "singleQuote": false, + "trailingComma": "all", + "endOfLine": "lf", + "semi": false, + "tabWidth": 2, + "plugins": ["prettier-plugin-tailwindcss"], + "tailwindFunctions": ["tv", "cx"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ef73e05 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "tailwindCSS.experimental.classRegex": [ + ["clsx\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], + ["cx\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] + ], + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } +} diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..8318dc0 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/README.md b/README.md new file mode 100644 index 0000000..53bd659 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +
+
+
+ +

+ Tremor – Dashboard Template +

+ +

+ Preview OSS version | + Preview full version | + Get full version +

+ +`Dashboard` is a SaaS application template from [Tremor](https://tremor.so). It's built +using [`Tremor Raw`](https://raw.tremor.so/docs/getting-started/installation) +and [Next.js](https://nextjs.org). + +
+ +[![Tremor Banner](public/images/og_github.jpg)](https://dashboard.tremor.so/overview) + +
+ +
+ +## Getting started + +1. Install the dependencies. We recommend using pnpm. If you want to use `npm`, + just replace `pnpm` with `npm`. + +```bash +pnpm install +``` + +2. Then, start the development server: + +```bash +pnpm run dev +``` + +3. Visit [http://localhost:3000](http://localhost:3000) in your browser to view + the template. + +## Notes + +This project uses +[`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to +automatically optimize and load Inter, a custom Google Font. + +This project uses +[`Tremor Raw`](https://raw.tremor.so/docs/getting-started/installation) +components for the UI. + +## License + +This site template is licensed under the +[Apache 2.0 License](https://github.com/tremorlabs/tremor-dashboard-template?tab=License-1-ov-file#readme). + +## Learn more + +For a deeper understanding of the technologies used in this template, check out +the resources listed below: + +- [Tremor Raw](https://raw.tremor.so) - Tremor Raw documentation +- [Tailwind CSS](https://tailwindcss.com) - A utility-first CSS framework +- [Next.js](https://nextjs.org/docs) - Next.js documentation +- [Radix UI](https://www.radix-ui.com) - Radix UI Website +- [Recharts](https://recharts.org) - Recharts documentation and website +- [Tanstack](https://tanstack.com/table/latest) - TanStack table documentation + +--- + +Copyright © 2024 Tremor Labs, Inc. All rights reserved. diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..c47354d --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,15 @@ +/** @type {import('next').NextConfig} */ + +const nextConfig = { + redirects: async () => { + return [ + { + source: "/", + destination: "/overview", + permanent: true, + }, + ]; + }, +}; + +export default nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..a672c5b --- /dev/null +++ b/package.json @@ -0,0 +1,48 @@ +{ + "name": "template-dashboard-open-source-version", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "generate": "node src/data/generateData.js" + }, + "dependencies": { + "@internationalized/date": "^3.5.4", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-radio-group": "^1.1.3", + "@radix-ui/react-select": "^2.0.0", + "@radix-ui/react-slot": "^1.0.2", + "@react-aria/datepicker": "^3.10.1", + "@react-stately/datepicker": "^3.9.4", + "@remixicon/react": "^4.2.0", + "clsx": "^2.1.1", + "date-fns": "^3.6.0", + "next": "14.2.3", + "next-themes": "^0.3.0", + "react": "18.2.0", + "react-day-picker": "^8.10.1", + "react-dom": "18.2.0", + "recharts": "^2.12.7", + "tailwind-merge": "^2.3.0", + "tailwind-variants": "^0.2.1" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.7", + "@types/node": "^20.14.1", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.0", + "eslint": "^8.57.0", + "eslint-config-next": "14.2.3", + "postcss": "^8.4.38", + "prettier": "^3.3.0", + "prettier-plugin-tailwindcss": "^0.6.1", + "tailwindcss": "^3.4.3", + "typescript": "^5.4.5" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..94e2f7a --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4890 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@internationalized/date': + specifier: ^3.5.4 + version: 3.5.4 + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.6 + version: 2.0.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.0.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-popover': + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-radio-group': + specifier: ^1.1.3 + version: 1.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-select': + specifier: ^2.0.0 + version: 2.0.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.0)(react@18.2.0) + '@react-aria/datepicker': + specifier: ^3.10.1 + version: 3.10.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-stately/datepicker': + specifier: ^3.9.4 + version: 3.9.4(react@18.2.0) + '@remixicon/react': + specifier: ^4.2.0 + version: 4.2.0(react@18.2.0) + clsx: + specifier: ^2.1.1 + version: 2.1.1 + date-fns: + specifier: ^3.6.0 + version: 3.6.0 + next: + specifier: 14.2.3 + version: 14.2.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + next-themes: + specifier: ^0.3.0 + version: 0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: + specifier: 18.2.0 + version: 18.2.0 + react-day-picker: + specifier: ^8.10.1 + version: 8.10.1(date-fns@3.6.0)(react@18.2.0) + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + recharts: + specifier: ^2.12.7 + version: 2.12.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + tailwind-merge: + specifier: ^2.3.0 + version: 2.3.0 + tailwind-variants: + specifier: ^0.2.1 + version: 0.2.1(tailwindcss@3.4.3) + devDependencies: + '@tailwindcss/forms': + specifier: ^0.5.7 + version: 0.5.7(tailwindcss@3.4.3) + '@types/node': + specifier: ^20.14.1 + version: 20.14.1 + '@types/react': + specifier: 18.2.0 + version: 18.2.0 + '@types/react-dom': + specifier: 18.2.0 + version: 18.2.0 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-next: + specifier: 14.2.3 + version: 14.2.3(eslint@8.57.0)(typescript@5.4.5) + postcss: + specifier: ^8.4.38 + version: 8.4.38 + prettier: + specifier: ^3.3.0 + version: 3.3.0 + prettier-plugin-tailwindcss: + specifier: ^0.6.1 + version: 0.6.1(prettier@3.3.0) + tailwindcss: + specifier: ^3.4.3 + version: 3.4.3 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.1': + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.6.2': + resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} + + '@floating-ui/dom@1.6.5': + resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} + + '@floating-ui/react-dom@2.1.0': + resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.2': + resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} + + '@formatjs/ecma402-abstract@2.0.0': + resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} + + '@formatjs/fast-memoize@2.2.0': + resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} + + '@formatjs/icu-messageformat-parser@2.7.8': + resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==} + + '@formatjs/icu-skeleton-parser@1.8.2': + resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==} + + '@formatjs/intl-localematcher@0.5.4': + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@internationalized/date@3.5.4': + resolution: {integrity: sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==} + + '@internationalized/message@3.1.4': + resolution: {integrity: sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==} + + '@internationalized/number@3.5.3': + resolution: {integrity: sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==} + + '@internationalized/string@3.2.3': + resolution: {integrity: sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@next/env@14.2.3': + resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} + + '@next/eslint-plugin-next@14.2.3': + resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} + + '@next/swc-darwin-arm64@14.2.3': + resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@14.2.3': + resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@14.2.3': + resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@14.2.3': + resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@14.2.3': + resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@14.2.3': + resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@14.2.3': + resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-ia32-msvc@14.2.3': + resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@next/swc-win32-x64-msvc@14.2.3': + resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@radix-ui/number@1.0.1': + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + + '@radix-ui/primitive@1.0.1': + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + + '@radix-ui/react-arrow@1.0.3': + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.0.3': + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.0.1': + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.0.1': + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.0.5': + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.0.1': + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.0.5': + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.0.6': + resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.0.1': + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.0.4': + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.0.1': + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.0.2': + resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.0.6': + resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.0.7': + resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.1.3': + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.0.4': + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.0.1': + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@1.0.3': + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-radio-group@1.1.3': + resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.0.4': + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.0.0': + resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.0.2': + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-callback-ref@1.0.1': + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.0.1': + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.0.3': + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.0.1': + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.0.1': + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.0.1': + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.0.1': + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.0.3': + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.0.1': + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + + '@react-aria/datepicker@3.10.1': + resolution: {integrity: sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/focus@3.17.1': + resolution: {integrity: sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/form@3.0.5': + resolution: {integrity: sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/i18n@3.11.1': + resolution: {integrity: sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/interactions@3.21.3': + resolution: {integrity: sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/label@3.7.8': + resolution: {integrity: sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/live-announcer@3.3.4': + resolution: {integrity: sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA==} + + '@react-aria/spinbutton@3.6.5': + resolution: {integrity: sha512-0aACBarF/Xr/7ixzjVBTQ0NBwwwsoGkf5v6AVFVMTC0uYMXHTALvRs+ULHjHMa5e/cX/aPlEvaVT7jfSs+Xy9Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/ssr@3.9.4': + resolution: {integrity: sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-aria/utils@3.24.1': + resolution: {integrity: sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-stately/datepicker@3.9.4': + resolution: {integrity: sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-stately/form@3.0.3': + resolution: {integrity: sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-stately/overlays@3.6.7': + resolution: {integrity: sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-stately/utils@3.10.1': + resolution: {integrity: sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-types/button@3.9.4': + resolution: {integrity: sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-types/calendar@3.4.6': + resolution: {integrity: sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-types/datepicker@3.7.4': + resolution: {integrity: sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-types/dialog@3.5.10': + resolution: {integrity: sha512-S9ga+edOLNLZw7/zVOnZdT5T40etpzUYBXEKdFPbxyPYnERvRxJAsC1/ASuBU9fQAXMRgLZzADWV+wJoGS/X9g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-types/overlays@3.8.7': + resolution: {integrity: sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@react-types/shared@3.23.1': + resolution: {integrity: sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + + '@remixicon/react@4.2.0': + resolution: {integrity: sha512-eGhKpZ88OU0qkcY9pJu6khBmItDV82nU130E6C68yc+FbljueHlUYy/4CrJsmf860RIDMay2Rpzl27OSJ81miw==} + peerDependencies: + react: '>=18.2.0' + + '@rushstack/eslint-patch@1.10.3': + resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.11': + resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} + + '@swc/helpers@0.5.5': + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + + '@tailwindcss/forms@0.5.7': + resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} + peerDependencies: + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' + + '@types/d3-array@3.2.1': + resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.0': + resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} + + '@types/d3-scale@4.0.8': + resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + + '@types/d3-shape@3.1.6': + resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} + + '@types/d3-time@3.0.3': + resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@20.14.1': + resolution: {integrity: sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.2.0': + resolution: {integrity: sha512-8yQrvS6sMpSwIovhPOwfyNf2Wz6v/B62LFSVYQ85+Rq3tLsBIG7rP5geMxaijTUxSkrO6RzN/IRuIAADYQsleA==} + + '@types/react@18.2.0': + resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==} + + '@types/scheduler@0.23.0': + resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} + + '@typescript-eslint/parser@7.2.0': + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.2.0': + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@7.2.0': + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@7.2.0': + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/visitor-keys@7.2.0': + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + + axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001628: + resolution: {integrity: sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + engines: {node: '>=10.13.0'} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@14.2.3: + resolution: {integrity: sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.1: + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + + eslint-module-utils@2.8.1: + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.8.0: + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.34.2: + resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + intl-messageformat@10.5.14: + resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.3.0: + resolution: {integrity: sha512-glPiBfKguqA7v8JsXO3iLjJWZ9FV1vNpoI0I9hI9Mnk5yetO9uPLSpiCEmiVijAssv2f54HpvtzvAHfhPieiDQ==} + engines: {node: '>=14'} + + jiti@1.21.1: + resolution: {integrity: sha512-KMXpzEJMsOFyRj6ZpDTnnlJrdr9umUY+eut5vlRvjVixohitnRFIRTFw9MEu9zPlBxTHZo6xD5ftKYiQZuJYQw==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next-themes@0.3.0: + resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + + next@14.2.3: + resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.0: + resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-tailwindcss@0.6.1: + resolution: {integrity: sha512-AnbeYZu0WGj+QgKciUgdMnRxrqcxltleZPgdwfA5104BHM3siBLONN/HLW1yS2HvzSNkzpQ/JAj+LN0jcJO+0w==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig-melody': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig-melody': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + + prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-day-picker@8.10.1: + resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} + peerDependencies: + date-fns: ^2.28.0 || ^3.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.5.5: + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-smooth@4.0.1: + resolution: {integrity: sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recharts-scale@0.4.5: + resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} + + recharts@2.12.7: + resolution: {integrity: sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==} + engines: {node: '>=14'} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.1: + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwind-merge@2.3.0: + resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + + tailwind-variants@0.2.1: + resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwindcss: '*' + + tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + victory-vendor@36.9.2: + resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yaml@2.4.3: + resolution: {integrity: sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==} + engines: {node: '>= 14'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.5 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@floating-ui/core@1.6.2': + dependencies: + '@floating-ui/utils': 0.2.2 + + '@floating-ui/dom@1.6.5': + dependencies: + '@floating-ui/core': 1.6.2 + '@floating-ui/utils': 0.2.2 + + '@floating-ui/react-dom@2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.6.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@floating-ui/utils@0.2.2': {} + + '@formatjs/ecma402-abstract@2.0.0': + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + + '@formatjs/fast-memoize@2.2.0': + dependencies: + tslib: 2.6.3 + + '@formatjs/icu-messageformat-parser@2.7.8': + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/icu-skeleton-parser': 1.8.2 + tslib: 2.6.3 + + '@formatjs/icu-skeleton-parser@1.8.2': + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + tslib: 2.6.3 + + '@formatjs/intl-localematcher@0.5.4': + dependencies: + tslib: 2.6.3 + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.5 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@internationalized/date@3.5.4': + dependencies: + '@swc/helpers': 0.5.11 + + '@internationalized/message@3.1.4': + dependencies: + '@swc/helpers': 0.5.11 + intl-messageformat: 10.5.14 + + '@internationalized/number@3.5.3': + dependencies: + '@swc/helpers': 0.5.11 + + '@internationalized/string@3.2.3': + dependencies: + '@swc/helpers': 0.5.11 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@next/env@14.2.3': {} + + '@next/eslint-plugin-next@14.2.3': + dependencies: + glob: 10.3.10 + + '@next/swc-darwin-arm64@14.2.3': + optional: true + + '@next/swc-darwin-x64@14.2.3': + optional: true + + '@next/swc-linux-arm64-gnu@14.2.3': + optional: true + + '@next/swc-linux-arm64-musl@14.2.3': + optional: true + + '@next/swc-linux-x64-gnu@14.2.3': + optional: true + + '@next/swc-linux-x64-musl@14.2.3': + optional: true + + '@next/swc-win32-arm64-msvc@14.2.3': + optional: true + + '@next/swc-win32-ia32-msvc@14.2.3': + optional: true + + '@next/swc-win32-x64-msvc@14.2.3': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@radix-ui/number@1.0.1': + dependencies: + '@babel/runtime': 7.24.6 + + '@radix-ui/primitive@1.0.1': + dependencies: + '@babel/runtime': 7.24.6 + + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-context@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-direction@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-id@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-label@2.0.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-select@2.0.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-slot@1.0.2(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-size@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/rect@1.0.1': + dependencies: + '@babel/runtime': 7.24.6 + + '@react-aria/datepicker@3.10.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.4 + '@internationalized/number': 3.5.3 + '@internationalized/string': 3.2.3 + '@react-aria/focus': 3.17.1(react@18.2.0) + '@react-aria/form': 3.0.5(react@18.2.0) + '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/interactions': 3.21.3(react@18.2.0) + '@react-aria/label': 3.7.8(react@18.2.0) + '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-stately/datepicker': 3.9.4(react@18.2.0) + '@react-stately/form': 3.0.3(react@18.2.0) + '@react-types/button': 3.9.4(react@18.2.0) + '@react-types/calendar': 3.4.6(react@18.2.0) + '@react-types/datepicker': 3.7.4(react@18.2.0) + '@react-types/dialog': 3.5.10(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/focus@3.17.1(react@18.2.0)': + dependencies: + '@react-aria/interactions': 3.21.3(react@18.2.0) + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + clsx: 2.1.1 + react: 18.2.0 + + '@react-aria/form@3.0.5(react@18.2.0)': + dependencies: + '@react-aria/interactions': 3.21.3(react@18.2.0) + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-stately/form': 3.0.3(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-aria/i18n@3.11.1(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.4 + '@internationalized/message': 3.1.4 + '@internationalized/number': 3.5.3 + '@internationalized/string': 3.2.3 + '@react-aria/ssr': 3.9.4(react@18.2.0) + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-aria/interactions@3.21.3(react@18.2.0)': + dependencies: + '@react-aria/ssr': 3.9.4(react@18.2.0) + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-aria/label@3.7.8(react@18.2.0)': + dependencies: + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-aria/live-announcer@3.3.4': + dependencies: + '@swc/helpers': 0.5.11 + + '@react-aria/spinbutton@3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/live-announcer': 3.3.4 + '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-types/button': 3.9.4(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/ssr@3.9.4(react@18.2.0)': + dependencies: + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-aria/utils@3.24.1(react@18.2.0)': + dependencies: + '@react-aria/ssr': 3.9.4(react@18.2.0) + '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + clsx: 2.1.1 + react: 18.2.0 + + '@react-stately/datepicker@3.9.4(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.4 + '@internationalized/string': 3.2.3 + '@react-stately/form': 3.0.3(react@18.2.0) + '@react-stately/overlays': 3.6.7(react@18.2.0) + '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-types/datepicker': 3.7.4(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-stately/form@3.0.3(react@18.2.0)': + dependencies: + '@react-types/shared': 3.23.1(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-stately/overlays@3.6.7(react@18.2.0)': + dependencies: + '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-types/overlays': 3.8.7(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-stately/utils@3.10.1(react@18.2.0)': + dependencies: + '@swc/helpers': 0.5.11 + react: 18.2.0 + + '@react-types/button@3.9.4(react@18.2.0)': + dependencies: + '@react-types/shared': 3.23.1(react@18.2.0) + react: 18.2.0 + + '@react-types/calendar@3.4.6(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.4 + '@react-types/shared': 3.23.1(react@18.2.0) + react: 18.2.0 + + '@react-types/datepicker@3.7.4(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.4 + '@react-types/calendar': 3.4.6(react@18.2.0) + '@react-types/overlays': 3.8.7(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + react: 18.2.0 + + '@react-types/dialog@3.5.10(react@18.2.0)': + dependencies: + '@react-types/overlays': 3.8.7(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) + react: 18.2.0 + + '@react-types/overlays@3.8.7(react@18.2.0)': + dependencies: + '@react-types/shared': 3.23.1(react@18.2.0) + react: 18.2.0 + + '@react-types/shared@3.23.1(react@18.2.0)': + dependencies: + react: 18.2.0 + + '@remixicon/react@4.2.0(react@18.2.0)': + dependencies: + react: 18.2.0 + + '@rushstack/eslint-patch@1.10.3': {} + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.11': + dependencies: + tslib: 2.6.3 + + '@swc/helpers@0.5.5': + dependencies: + '@swc/counter': 0.1.3 + tslib: 2.6.3 + + '@tailwindcss/forms@0.5.7(tailwindcss@3.4.3)': + dependencies: + mini-svg-data-uri: 1.4.4 + tailwindcss: 3.4.3 + + '@types/d3-array@3.2.1': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.0': {} + + '@types/d3-scale@4.0.8': + dependencies: + '@types/d3-time': 3.0.3 + + '@types/d3-shape@3.1.6': + dependencies: + '@types/d3-path': 3.1.0 + + '@types/d3-time@3.0.3': {} + + '@types/d3-timer@3.0.2': {} + + '@types/json5@0.0.29': {} + + '@types/node@20.14.1': + dependencies: + undici-types: 5.26.5 + + '@types/prop-types@15.7.12': {} + + '@types/react-dom@18.2.0': + dependencies: + '@types/react': 18.2.0 + + '@types/react@18.2.0': + dependencies: + '@types/prop-types': 15.7.12 + '@types/scheduler': 0.23.0 + csstype: 3.1.3 + + '@types/scheduler@0.23.0': {} + + '@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.5 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.2.0': + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + + '@typescript-eslint/types@7.2.0': {} + + '@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@7.2.0': + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn@8.11.3: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-hidden@1.2.4: + dependencies: + tslib: 2.6.3 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.toreversed@1.1.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + ast-types-flow@0.0.8: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axe-core@4.7.0: {} + + axobject-query@3.2.1: + dependencies: + dequal: 2.0.3 + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + caniuse-lite@1.0.30001628: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + client-only@0.0.1: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-color@3.1.0: {} + + d3-ease@3.0.1: {} + + d3-format@3.1.0: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@3.1.0: {} + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + date-fns@3.6.0: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + decimal.js-light@2.5.1: {} + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + dequal@2.0.3: {} + + detect-node-es@1.1.0: {} + + didyoumean@1.2.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.24.6 + csstype: 3.1.3 + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.17.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-iterator-helpers@1.0.19: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + escape-string-regexp@4.0.0: {} + + eslint-config-next@14.2.3(eslint@8.57.0)(typescript@5.4.5): + dependencies: + '@next/eslint-plugin-next': 14.2.3 + '@rushstack/eslint-patch': 1.10.3 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.34.2(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + dependencies: + debug: 4.3.5 + enhanced-resolve: 5.17.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.5 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + dependencies: + '@babel/runtime': 7.24.6 + aria-query: 5.3.0 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + + eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-plugin-react@7.34.2(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.5 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + eventemitter3@4.0.7: {} + + fast-deep-equal@3.1.3: {} + + fast-equals@5.0.1: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-nonce@1.0.1: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.3.10: + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@10.4.1: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.3.0 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.0.2: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + internmap@2.0.3: {} + + intl-messageformat@10.5.14: + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/fast-memoize': 2.2.0 + '@formatjs/icu-messageformat-parser': 2.7.8 + tslib: 2.6.3 + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-weakset@2.0.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.2: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + jackspeak@2.3.6: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@3.3.0: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + lilconfig@3.1.1: {} + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.2.2: {} + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mini-svg-data-uri@1.4.4: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + next-themes@0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + next@14.2.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@next/env': 14.2.3 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001628 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.3 + '@next/swc-darwin-x64': 14.2.3 + '@next/swc-linux-arm64-gnu': 14.2.3 + '@next/swc-linux-arm64-musl': 14.2.3 + '@next/swc-linux-x64-gnu': 14.2.3 + '@next/swc-linux-x64-musl': 14.2.3 + '@next/swc-win32-arm64-msvc': 14.2.3 + '@next/swc-win32-ia32-msvc': 14.2.3 + '@next/swc-win32-x64-msvc': 14.2.3 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + normalize-path@3.0.0: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.1: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + + object.hasown@1.1.4: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + + path-type@4.0.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pirates@4.0.6: {} + + possible-typed-array-names@1.0.0: {} + + postcss-import@15.1.0(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.38): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.38 + + postcss-load-config@4.0.2(postcss@8.4.38): + dependencies: + lilconfig: 3.1.1 + yaml: 2.4.3 + optionalDependencies: + postcss: 8.4.38 + + postcss-nested@6.0.1(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.0 + + postcss-selector-parser@6.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + postcss@8.4.38: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + prelude-ls@1.2.1: {} + + prettier-plugin-tailwindcss@0.6.1(prettier@3.3.0): + dependencies: + prettier: 3.3.0 + + prettier@3.3.0: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-day-picker@8.10.1(date-fns@3.6.0)(react@18.2.0): + dependencies: + date-fns: 3.6.0 + react: 18.2.0 + + react-dom@18.2.0(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.2 + + react-is@16.13.1: {} + + react-remove-scroll-bar@2.3.6(@types/react@18.2.0)(react@18.2.0): + dependencies: + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.0)(react@18.2.0) + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.2.0 + + react-remove-scroll@2.5.5(@types/react@18.2.0)(react@18.2.0): + dependencies: + react: 18.2.0 + react-remove-scroll-bar: 2.3.6(@types/react@18.2.0)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.0)(react@18.2.0) + tslib: 2.6.3 + use-callback-ref: 1.3.2(@types/react@18.2.0)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + + react-smooth@4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + fast-equals: 5.0.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + + react-style-singleton@2.2.1(@types/react@18.2.0)(react@18.2.0): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.2.0 + + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.24.6 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + recharts-scale@0.4.5: + dependencies: + decimal.js-light: 2.5.1 + + recharts@2.12.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + clsx: 2.1.1 + eventemitter3: 4.0.7 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 16.13.1 + react-smooth: 4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + recharts-scale: 0.4.5 + tiny-invariant: 1.3.3 + victory-vendor: 36.9.2 + + reflect.getprototypeof@1.0.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.3 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + semver@7.6.2: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + source-map-js@1.2.0: {} + + streamsearch@1.1.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.1(react@18.2.0): + dependencies: + client-only: 0.0.1 + react: 18.2.0 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwind-merge@2.3.0: + dependencies: + '@babel/runtime': 7.24.6 + + tailwind-variants@0.2.1(tailwindcss@3.4.3): + dependencies: + tailwind-merge: 2.3.0 + tailwindcss: 3.4.3 + + tailwindcss@3.4.3: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.1 + lilconfig: 2.1.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.1.0 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tapable@2.2.1: {} + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tiny-invariant@1.3.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@1.3.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + ts-interface-checker@0.1.13: {} + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.6.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typescript@5.4.5: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@5.26.5: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.2(@types/react@18.2.0)(react@18.2.0): + dependencies: + react: 18.2.0 + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.2.0 + + use-sidecar@1.1.2(@types/react@18.2.0)(react@18.2.0): + dependencies: + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.2.0 + + util-deprecate@1.0.2: {} + + victory-vendor@36.9.2: + dependencies: + '@types/d3-array': 3.2.1 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.8 + '@types/d3-shape': 3.1.6 + '@types/d3-time': 3.0.3 + '@types/d3-timer': 3.0.2 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-builtin-type@1.1.3: + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + yaml@2.4.3: {} + + yocto-queue@0.1.0: {} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..1a69fd2 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/public/DatabaseLogo.tsx b/public/DatabaseLogo.tsx new file mode 100644 index 0000000..f2ac19f --- /dev/null +++ b/public/DatabaseLogo.tsx @@ -0,0 +1,77 @@ +import * as React from "react" +import type { SVGProps } from "react" +export const DatabaseLogo = (props: SVGProps) => ( + +) diff --git a/public/og_github.jpg b/public/og_github.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cea3d224d1cba3c80f1d9003d6f641a2ed1554c7 GIT binary patch literal 247906 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 literal 0 HcmV?d00001 diff --git a/src/app/(main)/details/page.tsx b/src/app/(main)/details/page.tsx new file mode 100644 index 0000000..dce0beb --- /dev/null +++ b/src/app/(main)/details/page.tsx @@ -0,0 +1,36 @@ +import { siteConfig } from "@/app/siteConfig" +import { Button } from "@/components/Button" +import { ArrowAnimated } from "@/components/ui/icons/ArrowAnimated" +import { TremorPlaceholder } from "@/components/ui/icons/TremorPlaceholder" +import Link from "next/link" + +export default function Example() { + return ( + <> +

+ Details +

+
+
+
+
+ + ) +} diff --git a/src/app/(main)/layout.tsx b/src/app/(main)/layout.tsx new file mode 100644 index 0000000..47e96ec --- /dev/null +++ b/src/app/(main)/layout.tsx @@ -0,0 +1,13 @@ +export default function Layout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( +
+
+ {children} +
+
+ ) +} diff --git a/src/app/(main)/overview/page.tsx b/src/app/(main)/overview/page.tsx new file mode 100644 index 0000000..fb82e93 --- /dev/null +++ b/src/app/(main)/overview/page.tsx @@ -0,0 +1,218 @@ +"use client" +import { CategoryBarCard } from "@/components/ui/overview/DashboardCategoryBarCard" +import { ChartCard } from "@/components/ui/overview/DashboardChartCard" +import { Filterbar } from "@/components/ui/overview/DashboardFilterbar" +import { ProgressBarCard } from "@/components/ui/overview/DashboardProgressBarCard" +import { overviews } from "@/data/overview-data" +import { OverviewData } from "@/data/schema" +import { cx } from "@/lib/utils" +import { subDays, toDate } from "date-fns" +import React from "react" +import { DateRange } from "react-day-picker" + +export type PeriodValue = "previous-period" | "last-year" | "no-comparison" + +const categories: { + title: keyof OverviewData + type: "currency" | "unit" +}[] = [ + { + title: "Rows read", + type: "unit", + }, + { + title: "Rows written", + type: "unit", + }, + { + title: "Queries", + type: "unit", + }, + { + title: "Payments completed", + type: "currency", + }, + { + title: "Sign ups", + type: "unit", + }, + { + title: "Logins", + type: "unit", + }, +] + +export type KpiEntry = { + title: string + percentage: number + current: number + allowed: number + unit?: string +} + +const data: KpiEntry[] = [ + { + title: "Rows read", + percentage: 48.1, + current: 48.1, + allowed: 100, + unit: "M", + }, + { + title: "Rows written", + percentage: 78.3, + current: 78.3, + allowed: 100, + unit: "M", + }, + { + title: "Storage", + percentage: 26, + current: 5.2, + allowed: 20, + unit: "GB", + }, +] + +const data2: KpiEntry[] = [ + { + title: "Weekly active users", + percentage: 21.7, + current: 21.7, + allowed: 100, + unit: "%", + }, + { + title: "Total users", + percentage: 70, + current: 28, + allowed: 40, + }, + { + title: "Uptime", + percentage: 98.3, + current: 98.3, + allowed: 100, + unit: "%", + }, +] + +export type KpiEntryExtended = Omit< + KpiEntry, + "current" | "allowed" | "unit" +> & { + value: string + color: string +} + +const data3: KpiEntryExtended[] = [ + { + title: "Base tier", + percentage: 68.1, + value: "$200", + color: "bg-indigo-600 dark:bg-indigo-500", + }, + { + title: "On-demand charges", + percentage: 20.8, + value: "$61.1", + color: "bg-purple-600 dark:bg-indigo-500", + }, + { + title: "Caching", + percentage: 11.1, + value: "$31.9", + color: "bg-gray-400 dark:bg-gray-600", + }, +] + +const overviewsDates = overviews.map((item) => toDate(item.date).getTime()) +const maxDate = toDate(Math.max(...overviewsDates)) + +export default function Overview() { + const [selectedDates, setSelectedDates] = React.useState< + DateRange | undefined + >({ + from: subDays(maxDate, 30), + to: maxDate, + }) + + return ( + <> +
+

+ Current billing cycle +

+
+ + + +
+
+
+

+ Overview +

+
+ setSelectedDates(dates)} + /> +
+
+ {categories.map((category) => { + return ( + + ) + })} +
+
+ + ) +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..49deaba4332259593b9fa4c3e8550b83fb51c1ec GIT binary patch literal 285478 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
+ + + ) +} diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx new file mode 100644 index 0000000..20faa69 --- /dev/null +++ b/src/app/not-found.tsx @@ -0,0 +1,33 @@ +import { Button } from "@/components/Button" +import { RiArrowRightLine } from "@remixicon/react" +import Link from "next/link" +import { DatabaseLogo } from "../../public/DatabaseLogo" +import { siteConfig } from "./siteConfig" + +export default function NotFound() { + return ( +
+ + + +

+ 404 +

+

+ Page not found +

+

+ Sorry, we couldn’t find the page you’re looking for. +

+ +
+ ) +} diff --git a/src/app/settings/layout.tsx b/src/app/settings/layout.tsx new file mode 100644 index 0000000..b07c28e --- /dev/null +++ b/src/app/settings/layout.tsx @@ -0,0 +1,14 @@ +export default function Layout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( +
+

+ Settings +

+
{children}
+
+ ) +} diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx new file mode 100644 index 0000000..1d4bc60 --- /dev/null +++ b/src/app/settings/page.tsx @@ -0,0 +1,33 @@ +import { Button } from "@/components/Button" +import { ArrowAnimated } from "@/components/ui/icons/ArrowAnimated" +import { TremorPlaceholder } from "@/components/ui/icons/TremorPlaceholder" +import Link from "next/link" +import { siteConfig } from "../siteConfig" + +export default function Settings() { + return ( + <> +
+
+
+
+ + ) +} diff --git a/src/app/siteConfig.ts b/src/app/siteConfig.ts new file mode 100644 index 0000000..1107367 --- /dev/null +++ b/src/app/siteConfig.ts @@ -0,0 +1,16 @@ +export const siteConfig = { + name: "Dashboard", + url: "https://dashboard.tremor.so", + description: "The only dashboard you will ever need.", + baseLinks: { + home: "/", + overview: "/overview", + details: "/details", + settings: "/settings", + }, + externalLink: { + blocks: "https://blocks.tremor.so/templates#dashboard", + }, +} + +export type siteConfig = typeof siteConfig diff --git a/src/components/Badge.tsx b/src/components/Badge.tsx new file mode 100644 index 0000000..52460be --- /dev/null +++ b/src/components/Badge.tsx @@ -0,0 +1,59 @@ +// Tremor Raw Badge [v0.0.0] + +import React from "react" +import { tv, type VariantProps } from "tailwind-variants" + +import { cx } from "@/lib/utils" + +const badgeVariants = tv({ + base: cx( + "inline-flex items-center gap-x-1 whitespace-nowrap rounded px-1.5 py-0.5 text-xs font-semibold ring-1", + ), + variants: { + variant: { + default: [ + "bg-indigo-50 text-indigo-800 ring-indigo-500/30", + "dark:bg-indigo-400/10 dark:text-indigo-400 dark:ring-indigo-400/30", + ], + neutral: [ + "bg-gray-50 text-gray-700 ring-gray-500/30", + "dark:bg-gray-400/10 dark:text-gray-300 dark:ring-gray-400/20", + ], + success: [ + "bg-emerald-50 text-emerald-800 ring-emerald-600/30", + "dark:bg-emerald-400/10 dark:text-emerald-400 dark:ring-emerald-400/20", + ], + error: [ + "bg-red-50 text-red-800 ring-red-600/20", + "dark:bg-red-400/10 dark:text-red-400 dark:ring-red-400/20", + ], + warning: [ + "bg-yellow-50 text-yellow-800 ring-yellow-600/30", + "dark:bg-yellow-400/10 dark:text-yellow-500 dark:ring-yellow-400/20", + ], + }, + }, + defaultVariants: { + variant: "default", + }, +}) + +interface BadgeProps + extends React.ComponentPropsWithoutRef<"span">, + VariantProps {} + +const Badge = React.forwardRef( + ({ className, variant, ...props }: BadgeProps, forwardedRef) => { + return ( + + ) + }, +) + +Badge.displayName = "Badge" + +export { Badge, badgeVariants, type BadgeProps } diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 0000000..b31c1ac --- /dev/null +++ b/src/components/Button.tsx @@ -0,0 +1,144 @@ +// Tremor Raw Button [v0.0.0] + +import { Slot } from "@radix-ui/react-slot" +import { RiLoader2Fill } from "@remixicon/react" +import React from "react" +import { tv, type VariantProps } from "tailwind-variants" + +import { cx, focusRing } from "@/lib/utils" + +const buttonVariants = tv({ + base: [ + // base + "relative inline-flex items-center justify-center whitespace-nowrap rounded-md border px-3 py-1.5 text-center text-base font-medium shadow-sm transition-all duration-100 ease-in-out sm:text-sm", + // disabled + "disabled:pointer-events-none disabled:shadow-none", + // focus + focusRing, + ], + variants: { + variant: { + primary: [ + // border + "border-transparent", + // text color + "text-white dark:text-gray-50", + // background color + "bg-indigo-600 dark:bg-indigo-500", + // hover color + "hover:bg-indigo-500 dark:hover:bg-indigo-600", + // disabled + "disabled:bg-indigo-100 disabled:text-gray-400", + "disabled:dark:bg-indigo-800 disabled:dark:text-indigo-400", + ], + secondary: [ + // border + "border-gray-300 dark:border-gray-800", + // text color + "text-gray-900 dark:text-gray-50", + // background color + "bg-white dark:bg-gray-950", + //hover color + "hover:bg-gray-50 dark:hover:bg-gray-900/60", + // disabled + "disabled:text-gray-400", + "disabled:dark:text-gray-600", + ], + light: [ + // base + "shadow-none", + // border + "border-transparent", + // text color + "text-gray-900 dark:text-gray-50", + // background color + "bg-gray-200 dark:bg-gray-900", + // hover color + "hover:bg-gray-300/70 dark:hover:bg-gray-800/80", + // disabled + "disabled:bg-gray-100 disabled:text-gray-400", + "disabled:dark:bg-gray-800 disabled:dark:text-gray-600", + ], + ghost: [ + // base + "shadow-none", + // border + "border-transparent", + // text color + "text-gray-900 dark:text-gray-50", + // disabled + "disabled:bg-gray-100 disabled:text-gray-400", + "disabled:dark:bg-gray-800 disabled:dark:text-gray-600", + ], + destructive: [ + // text color + "text-white", + // border + "border-transparent", + // background color + "bg-red-600 dark:bg-red-700", + // hover color + "hover:bg-red-700 dark:hover:bg-red-600", + // disabled + "disabled:bg-red-300 disabled:text-white", + "disabled:dark:bg-red-950 disabled:dark:text-red-400", + ], + }, + }, + defaultVariants: { + variant: "primary", + }, +}) + +interface ButtonProps + extends React.ComponentPropsWithoutRef<"button">, + VariantProps { + asChild?: boolean + isLoading?: boolean + loadingText?: string +} + +const Button = React.forwardRef( + ( + { + asChild, + isLoading = false, + loadingText, + className, + disabled, + variant, + children, + ...props + }: ButtonProps, + forwardedRef, + ) => { + const Component = asChild ? Slot : "button" + return ( + + {isLoading ? ( + + + ) : ( + children + )} + + ) + }, +) + +Button.displayName = "Button" + +export { Button, buttonVariants, type ButtonProps } diff --git a/src/components/Calendar.tsx b/src/components/Calendar.tsx new file mode 100644 index 0000000..cee87f1 --- /dev/null +++ b/src/components/Calendar.tsx @@ -0,0 +1,319 @@ +// Tremor Raw Calendar [v0.0.1] + +"use client" + +import { + RiArrowLeftDoubleLine, + RiArrowLeftSLine, + RiArrowRightDoubleLine, + RiArrowRightSLine, +} from "@remixicon/react" +import { addYears, format, isSameMonth } from "date-fns" +import * as React from "react" +import { + DayPicker, + useDayPicker, + useDayRender, + useNavigation, + type DayPickerRangeProps, + type DayPickerSingleProps, + type DayProps, + type Matcher, +} from "react-day-picker" + +import { cx, focusRing } from "@/lib/utils" + +interface NavigationButtonProps + extends React.HTMLAttributes { + onClick: () => void + icon: React.ElementType + disabled?: boolean +} + +const NavigationButton = React.forwardRef< + HTMLButtonElement, + NavigationButtonProps +>( + ( + { onClick, icon, disabled, ...props }: NavigationButtonProps, + forwardedRef, + ) => { + const Icon = icon + return ( + + ) + }, +) + +NavigationButton.displayName = "NavigationButton" + +type OmitKeys = { + [P in keyof T as P extends K ? never : P]: T[P] +} + +type KeysToOmit = "showWeekNumber" | "captionLayout" | "mode" + +type SingleProps = OmitKeys +type RangeProps = OmitKeys + +type CalendarProps = + | ({ + mode: "single" + } & SingleProps) + | ({ + mode?: undefined + } & SingleProps) + | ({ + mode: "range" + } & RangeProps) + +const Calendar = ({ + mode = "single", + weekStartsOn = 1, + numberOfMonths = 1, + enableYearNavigation = false, + disableNavigation, + locale, + className, + classNames, + ...props +}: CalendarProps & { enableYearNavigation?: boolean }) => { + return ( + ( +
+ ) + } + + const { + children: buttonChildren, + className: buttonClassName, + ...buttonPropsRest + } = buttonProps + + return ( + + ) + }, + }} + {...(props as SingleProps & RangeProps)} + /> + ) +} + +Calendar.displayName = "Calendar" + +export { Calendar, type Matcher } diff --git a/src/components/DatePicker.tsx b/src/components/DatePicker.tsx new file mode 100644 index 0000000..e50b578 --- /dev/null +++ b/src/components/DatePicker.tsx @@ -0,0 +1,1198 @@ +// Tremor Raw Date Picker [v1.0.0] + +"use client" + +import { Time } from "@internationalized/date" +import * as PopoverPrimitives from "@radix-ui/react-popover" +import { + AriaTimeFieldProps, + TimeValue, + useDateSegment, + useTimeField, +} from "@react-aria/datepicker" +import { + useTimeFieldState, + type DateFieldState, + type DateSegment, +} from "@react-stately/datepicker" +import { RiCalendar2Fill, RiSubtractFill } from "@remixicon/react" +import { format, type Locale } from "date-fns" +import { enUS } from "date-fns/locale" +import * as React from "react" +import { VariantProps, tv } from "tailwind-variants" + +import { cx, focusInput, focusRing, hasErrorInput } from "@/lib/utils" + +import { Button } from "./Button" +import { Calendar as CalendarPrimitive, type Matcher } from "./Calendar" + +//#region TimeInput +// ============================================================================ + +const isBrowserLocaleClockType24h = () => { + const language = + typeof window !== "undefined" ? window.navigator.language : "en-US" + + const hr = new Intl.DateTimeFormat(language, { + hour: "numeric", + }).format() + + return Number.isInteger(Number(hr)) +} + +type TimeSegmentProps = { + segment: DateSegment + state: DateFieldState +} + +const TimeSegment = ({ segment, state }: TimeSegmentProps) => { + const ref = React.useRef(null) + + const { segmentProps } = useDateSegment(segment, state, ref) + + const isColon = segment.type === "literal" && segment.text === ":" + const isSpace = segment.type === "literal" && segment.text === " " + + const isDecorator = isColon || isSpace + + return ( +
+ + {segment.isPlaceholder ? "" : segment.text} +
+ ) +} + +type TimeInputProps = Omit< + AriaTimeFieldProps, + "label" | "shouldForceLeadingZeros" | "description" | "errorMessage" +> + +const TimeInput = React.forwardRef( + ({ hourCycle, ...props }: TimeInputProps, ref) => { + const innerRef = React.useRef(null) + + React.useImperativeHandle( + ref, + () => innerRef?.current, + ) + + const locale = window !== undefined ? window.navigator.language : "en-US" + + const state = useTimeFieldState({ + hourCycle: hourCycle, + locale: locale, + shouldForceLeadingZeros: true, + autoFocus: true, + ...props, + }) + + const { fieldProps } = useTimeField( + { + ...props, + hourCycle: hourCycle, + shouldForceLeadingZeros: true, + }, + state, + innerRef, + ) + + return ( +
+ {state.segments.map((segment, i) => ( + + ))} +
+ ) + }, +) +TimeInput.displayName = "TimeInput" + +//#region Trigger +// ============================================================================ + +const triggerStyles = tv({ + base: [ + // base + "peer flex w-full cursor-pointer appearance-none items-center gap-x-2 truncate rounded-md border px-2 py-1.5 shadow-sm outline-none transition-all sm:py-1 sm:text-sm", + // background color + "bg-white dark:bg-gray-950", + // border color + "border-gray-300 dark:border-gray-800", + // text color + "text-gray-900 dark:text-gray-50", + // placeholder color + "placeholder-gray-400 dark:placeholder-gray-500", + // hover + "hover:bg-gray-50 hover:dark:bg-gray-950/50", + // disabled + "disabled:pointer-events-none", + "disabled:bg-gray-100 disabled:text-gray-400", + "disabled:dark:border-gray-800 disabled:dark:bg-gray-800 disabled:dark:text-gray-500", + // focus + focusInput, + // invalid (optional) + // "aria-[invalid=true]:dark:ring-red-400/20 aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-red-200 aria-[invalid=true]:border-red-500 invalid:ring-2 invalid:ring-red-200 invalid:border-red-500" + ], + variants: { + hasError: { + true: hasErrorInput, + }, + }, +}) + +interface TriggerProps + extends React.ComponentProps<"button">, + VariantProps { + placeholder?: string +} + +const Trigger = React.forwardRef( + ( + { className, children, placeholder, hasError, ...props }: TriggerProps, + forwardedRef, + ) => { + return ( + + + + ) + }, +) + +Trigger.displayName = "DatePicker.Trigger" + +//#region Popover +// ============================================================================ + +const CalendarPopover = React.forwardRef< + React.ElementRef, + React.ComponentProps +>(({ align, className, children, ...props }, forwardedRef) => { + return ( + + e.preventDefault()} + className={cx( + // base + "relative z-50 w-fit rounded-md border text-sm shadow-xl shadow-black/[2.5%]", + // widths + "min-w-[calc(var(--radix-select-trigger-width)-2px)] max-w-[95vw]", + // border color + "border-gray-200 dark:border-gray-800", + // background color + "bg-white dark:bg-gray-950", + // transition + "will-change-[transform,opacity]", + "data-[state=closed]:animate-hide", + "data-[state=open]:data-[side=bottom]:animate-slideDownAndFade data-[state=open]:data-[side=left]:animate-slideLeftAndFade data-[state=open]:data-[side=right]:animate-slideRightAndFade data-[state=open]:data-[side=top]:animate-slideUpAndFade", + className, + )} + {...props} + > + {children} + + + ) +}) + +CalendarPopover.displayName = "DatePicker.CalendarPopover" + +//#region Preset +// ============================================================================ + +export type DateRange = { + from: Date | undefined + to?: Date | undefined +} + +interface Preset { + label: string +} + +interface DatePreset extends Preset { + date: Date +} + +interface DateRangePreset extends Preset { + dateRange: DateRange +} + +type PresetContainerProps = { + presets: TPreset[] + onSelect: (value: TValue) => void + currentValue?: TValue +} + +const PresetContainer = ({ + // Available preset configurations + presets, + // Event handler when a preset is selected + onSelect, + // Currently selected preset + currentValue, +}: PresetContainerProps) => { + const isDateRangePresets = (preset: any): preset is DateRangePreset => { + return "dateRange" in preset + } + + const isDatePresets = (preset: any): preset is DatePreset => { + return "date" in preset + } + + const handleClick = (preset: TPreset) => { + if (isDateRangePresets(preset)) { + onSelect(preset.dateRange as TValue) + } else if (isDatePresets(preset)) { + onSelect(preset.date as TValue) + } + } + + const compareDates = (date1: Date, date2: Date) => { + return ( + date1.getDate() === date2.getDate() && + date1.getMonth() === date2.getMonth() && + date1.getFullYear() === date2.getFullYear() + ) + } + + const compareRanges = (range1: DateRange, range2: DateRange) => { + const from1 = range1.from + const from2 = range2.from + + let equalFrom = false + + if (from1 && from2) { + const sameFrom = compareDates(from1, from2) + + if (sameFrom) { + equalFrom = true + } + } + + const to1 = range1.to + const to2 = range2.to + + let equalTo = false + + if (to1 && to2) { + const sameTo = compareDates(to1, to2) + + if (sameTo) { + equalTo = true + } + } + + return equalFrom && equalTo + } + + const matchesCurrent = (preset: TPreset) => { + if (isDateRangePresets(preset)) { + const value = currentValue as DateRange | undefined + + return value && compareRanges(value, preset.dateRange) + } else if (isDatePresets(preset)) { + const value = currentValue as Date | undefined + + return value && compareDates(value, preset.date) + } + + return false + } + + return ( +
    + {presets.map((preset, index) => { + return ( +
  • + +
  • + ) + })} +
+ ) +} + +PresetContainer.displayName = "DatePicker.PresetContainer" + +//#region Date Picker Shared +// ============================================================================ + +const formatDate = ( + date: Date, + locale: Locale, + includeTime?: boolean, +): string => { + const usesAmPm = !isBrowserLocaleClockType24h() + let dateString: string + + if (includeTime) { + dateString = usesAmPm + ? format(date, "dd MMM, yyyy h:mm a", { locale }) + : format(date, "dd MMM, yyyy HH:mm", { locale }) + } else { + dateString = format(date, "dd MMM, yyyy", { locale }) + } + + return dateString +} + +type CalendarProps = { + fromYear?: number + toYear?: number + fromMonth?: Date + toMonth?: Date + fromDay?: Date + toDay?: Date + fromDate?: Date + toDate?: Date + locale?: Locale +} + +type Translations = { + cancel?: string + apply?: string + start?: string + end?: string + range?: string +} + +interface PickerProps extends CalendarProps { + className?: string + disabled?: boolean + disabledDays?: Matcher | Matcher[] | undefined + required?: boolean + showTimePicker?: boolean + placeholder?: string + enableYearNavigation?: boolean + disableNavigation?: boolean + hasError?: boolean + id?: string + // Customize the date picker for different languages. + translations?: Translations + align?: "center" | "end" | "start" + "aria-invalid"?: boolean + "aria-label"?: string + "aria-labelledby"?: string + "aria-required"?: boolean +} + +//#region Single Date Picker +// ============================================================================ + +interface SingleProps extends Omit { + presets?: DatePreset[] + defaultValue?: Date + value?: Date + onChange?: (date: Date | undefined) => void + translations?: Omit +} + +const SingleDatePicker = ({ + defaultValue, + value, + onChange, + presets, + disabled, + disabledDays, + disableNavigation, + className, + showTimePicker, + placeholder = "Select date", + hasError, + translations, + enableYearNavigation = false, + locale = enUS, + align = "center", + ...props +}: SingleProps) => { + const [open, setOpen] = React.useState(false) + const [date, setDate] = React.useState( + value ?? defaultValue ?? undefined, + ) + const [month, setMonth] = React.useState(date) + + const [time, setTime] = React.useState( + value + ? new Time(value.getHours(), value.getMinutes()) + : defaultValue + ? new Time(defaultValue.getHours(), defaultValue.getMinutes()) + : new Time(0, 0), + ) + + const initialDate = React.useMemo(() => { + return date + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open]) + + React.useEffect(() => { + setDate(value ?? defaultValue ?? undefined) + }, [value, defaultValue]) + + React.useEffect(() => { + if (date) { + setMonth(date) + } + }, [date]) + + React.useEffect(() => { + if (!open) { + setMonth(date) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open]) + + const onCancel = () => { + setDate(initialDate) + setTime( + initialDate + ? new Time(initialDate.getHours(), initialDate.getMinutes()) + : new Time(0, 0), + ) + setOpen(false) + } + + const onOpenChange = (open: boolean) => { + if (!open) { + onCancel() + } + + setOpen(open) + } + + const onDateChange = (date: Date | undefined) => { + const newDate = date + if (showTimePicker) { + if (newDate && !time) { + setTime(new Time(0, 0)) + } + if (newDate && time) { + newDate.setHours(time.hour) + newDate.setMinutes(time.minute) + } + } + setDate(newDate) + } + + const onTimeChange = (time: TimeValue) => { + setTime(time) + + if (!date) { + return + } + + const newDate = new Date(date.getTime()) + + if (!time) { + newDate.setHours(0) + newDate.setMinutes(0) + } else { + newDate.setHours(time.hour) + newDate.setMinutes(time.minute) + } + + setDate(newDate) + } + + const formattedDate = React.useMemo(() => { + if (!date) { + return null + } + + return formatDate(date, locale, showTimePicker) + }, [date, locale, showTimePicker]) + + const onApply = () => { + setOpen(false) + onChange?.(date) + } + + React.useEffect(() => { + setDate(value ?? defaultValue ?? undefined) + setTime( + value + ? new Time(value.getHours(), value.getMinutes()) + : defaultValue + ? new Time(defaultValue.getHours(), defaultValue.getMinutes()) + : new Time(0, 0), + ) + }, [value, defaultValue]) + + return ( + + + {formattedDate} + + +
+
+ {presets && presets.length > 0 && ( +
+
+ +
+
+ )} +
+ + {showTimePicker && ( +
+ +
+ )} +
+ + +
+
+
+
+
+
+ ) +} + +//#region Range Date Picker +// ============================================================================ + +interface RangeProps extends PickerProps { + presets?: DateRangePreset[] + defaultValue?: DateRange + value?: DateRange + onChange?: (dateRange: DateRange | undefined) => void +} + +const RangeDatePicker = ({ + defaultValue, + value, + onChange, + presets, + disabled, + disableNavigation, + disabledDays, + enableYearNavigation = false, + locale = enUS, + showTimePicker, + placeholder = "Select date range", + hasError, + translations, + align = "center", + className, + ...props +}: RangeProps) => { + const [open, setOpen] = React.useState(false) + const [range, setRange] = React.useState( + value ?? defaultValue ?? undefined, + ) + const [month, setMonth] = React.useState(range?.from) + + const [startTime, setStartTime] = React.useState( + value?.from + ? new Time(value.from.getHours(), value.from.getMinutes()) + : defaultValue?.from + ? new Time(defaultValue.from.getHours(), defaultValue.from.getMinutes()) + : new Time(0, 0), + ) + const [endTime, setEndTime] = React.useState( + value?.to + ? new Time(value.to.getHours(), value.to.getMinutes()) + : defaultValue?.to + ? new Time(defaultValue.to.getHours(), defaultValue.to.getMinutes()) + : new Time(0, 0), + ) + + const initialRange = React.useMemo(() => { + return range + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open]) + + React.useEffect(() => { + setRange(value ?? defaultValue ?? undefined) + }, [value, defaultValue]) + + React.useEffect(() => { + if (range) { + setMonth(range.from) + } + }, [range]) + + React.useEffect(() => { + if (!open) { + setMonth(range?.from) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open]) + + const onRangeChange = (range: DateRange | undefined) => { + const newRange = range + if (showTimePicker) { + if (newRange?.from && !startTime) { + setStartTime(new Time(0, 0)) + } + + if (newRange?.to && !endTime) { + setEndTime(new Time(0, 0)) + } + + if (newRange?.from && startTime) { + newRange.from.setHours(startTime.hour) + newRange.from.setMinutes(startTime.minute) + } + + if (newRange?.to && endTime) { + newRange.to.setHours(endTime.hour) + newRange.to.setMinutes(endTime.minute) + } + } + + setRange(newRange) + } + + const onCancel = () => { + setRange(initialRange) + setStartTime( + initialRange?.from + ? new Time(initialRange.from.getHours(), initialRange.from.getMinutes()) + : new Time(0, 0), + ) + setEndTime( + initialRange?.to + ? new Time(initialRange.to.getHours(), initialRange.to.getMinutes()) + : new Time(0, 0), + ) + setOpen(false) + } + + const onOpenChange = (open: boolean) => { + if (!open) { + onCancel() + } + + setOpen(open) + } + + const onTimeChange = (time: TimeValue, pos: "start" | "end") => { + switch (pos) { + case "start": + setStartTime(time) + break + case "end": + setEndTime(time) + break + } + + if (!range) { + return + } + + if (pos === "start") { + if (!range.from) { + return + } + + const newDate = new Date(range.from.getTime()) + + if (!time) { + newDate.setHours(0) + newDate.setMinutes(0) + } else { + newDate.setHours(time.hour) + newDate.setMinutes(time.minute) + } + + setRange({ + ...range, + from: newDate, + }) + } + + if (pos === "end") { + if (!range.to) { + return + } + + const newDate = new Date(range.to.getTime()) + + if (!time) { + newDate.setHours(0) + newDate.setMinutes(0) + } else { + newDate.setHours(time.hour) + newDate.setMinutes(time.minute) + } + + setRange({ + ...range, + to: newDate, + }) + } + } + + React.useEffect(() => { + setRange(value ?? defaultValue ?? undefined) + + setStartTime( + value?.from + ? new Time(value.from.getHours(), value.from.getMinutes()) + : defaultValue?.from + ? new Time( + defaultValue.from.getHours(), + defaultValue.from.getMinutes(), + ) + : new Time(0, 0), + ) + setEndTime( + value?.to + ? new Time(value.to.getHours(), value.to.getMinutes()) + : defaultValue?.to + ? new Time(defaultValue.to.getHours(), defaultValue.to.getMinutes()) + : new Time(0, 0), + ) + }, [value, defaultValue]) + + const displayRange = React.useMemo(() => { + if (!range) { + return null + } + + return `${ + range.from ? formatDate(range.from, locale, showTimePicker) : "" + } - ${range.to ? formatDate(range.to, locale, showTimePicker) : ""}` + }, [range, locale, showTimePicker]) + + const onApply = () => { + setOpen(false) + onChange?.(range) + } + + return ( + + + {displayRange} + + +
+
+ {presets && presets.length > 0 && ( +
+
+ +
+
+ )} +
+ + {showTimePicker && ( +
+
+ + {translations?.start ?? "Start"}: + + onTimeChange(v, "start")} + aria-label="Start date time" + isDisabled={!range?.from} + isRequired={props.required} + /> +
+ +
+ + {translations?.end ?? "End"}: + + onTimeChange(v, "end")} + aria-label="End date time" + isDisabled={!range?.to} + isRequired={props.required} + /> +
+
+ )} +
+

+ + {translations?.range ?? "Range"}: + {" "} + {displayRange} +

+
+ + +
+
+
+
+
+
+
+ ) +} + +//#region Preset Validation +// ============================================================================ + +const validatePresets = ( + presets: DateRangePreset[] | DatePreset[], + rules: PickerProps, +) => { + const { toYear, fromYear, fromMonth, toMonth, fromDay, toDay } = rules + + if (presets && presets.length > 0) { + const fromYearToUse = fromYear + const toYearToUse = toYear + + presets.forEach((preset) => { + if ("date" in preset) { + const presetYear = preset.date.getFullYear() + + if (fromYear && presetYear < fromYear) { + throw new Error( + `Preset ${preset.label} is before fromYear ${fromYearToUse}.`, + ) + } + + if (toYear && presetYear > toYear) { + throw new Error( + `Preset ${preset.label} is after toYear ${toYearToUse}.`, + ) + } + + if (fromMonth) { + const presetMonth = preset.date.getMonth() + + if (presetMonth < fromMonth.getMonth()) { + throw new Error( + `Preset ${preset.label} is before fromMonth ${fromMonth}.`, + ) + } + } + + if (toMonth) { + const presetMonth = preset.date.getMonth() + + if (presetMonth > toMonth.getMonth()) { + throw new Error( + `Preset ${preset.label} is after toMonth ${toMonth}.`, + ) + } + } + + if (fromDay) { + const presetDay = preset.date.getDate() + + if (presetDay < fromDay.getDate()) { + throw new Error( + `Preset ${preset.label} is before fromDay ${fromDay}.`, + ) + } + } + + if (toDay) { + const presetDay = preset.date.getDate() + + if (presetDay > toDay.getDate()) { + throw new Error( + `Preset ${preset.label} is after toDay ${format( + toDay, + "MMM dd, yyyy", + )}.`, + ) + } + } + } + + if ("dateRange" in preset) { + const presetFromYear = preset.dateRange.from?.getFullYear() + const presetToYear = preset.dateRange.to?.getFullYear() + + if (presetFromYear && fromYear && presetFromYear < fromYear) { + throw new Error( + `Preset ${preset.label}'s 'from' is before fromYear ${fromYearToUse}.`, + ) + } + + if (presetToYear && toYear && presetToYear > toYear) { + throw new Error( + `Preset ${preset.label}'s 'to' is after toYear ${toYearToUse}.`, + ) + } + + if (fromMonth) { + const presetMonth = preset.dateRange.from?.getMonth() + + if (presetMonth && presetMonth < fromMonth.getMonth()) { + throw new Error( + `Preset ${preset.label}'s 'from' is before fromMonth ${format( + fromMonth, + "MMM, yyyy", + )}.`, + ) + } + } + + if (toMonth) { + const presetMonth = preset.dateRange.to?.getMonth() + + if (presetMonth && presetMonth > toMonth.getMonth()) { + throw new Error( + `Preset ${preset.label}'s 'to' is after toMonth ${format( + toMonth, + "MMM, yyyy", + )}.`, + ) + } + } + + if (fromDay) { + const presetDay = preset.dateRange.from?.getDate() + + if (presetDay && presetDay < fromDay.getDate()) { + throw new Error( + `Preset ${ + preset.dateRange.from + }'s 'from' is before fromDay ${format(fromDay, "MMM dd, yyyy")}.`, + ) + } + } + + if (toDay) { + const presetDay = preset.dateRange.to?.getDate() + + if (presetDay && presetDay > toDay.getDate()) { + throw new Error( + `Preset ${preset.label}'s 'to' is after toDay ${format( + toDay, + "MMM dd, yyyy", + )}.`, + ) + } + } + } + }) + } +} + +//#region Types & Exports +// ============================================================================ + +type SingleDatePickerProps = { + presets?: DatePreset[] + defaultValue?: Date + value?: Date + onChange?: (date: Date | undefined) => void +} & PickerProps + +const DatePicker = ({ presets, ...props }: SingleDatePickerProps) => { + if (presets) { + validatePresets(presets, props) + } + + return +} + +DatePicker.displayName = "DatePicker" + +type RangeDatePickerProps = { + presets?: DateRangePreset[] + defaultValue?: DateRange + value?: DateRange + onChange?: (dateRange: DateRange | undefined) => void +} & PickerProps + +const DateRangePicker = ({ presets, ...props }: RangeDatePickerProps) => { + if (presets) { + validatePresets(presets, props) + } + + return +} + +DateRangePicker.displayName = "DateRangePicker" + +export { DatePicker, DateRangePicker, type DatePreset, type DateRangePreset } diff --git a/src/components/Dialog.tsx b/src/components/Dialog.tsx new file mode 100644 index 0000000..e6188ec --- /dev/null +++ b/src/components/Dialog.tsx @@ -0,0 +1,149 @@ +// Tremor Raw Dialog [v0.0.0] + +import * as DialogPrimitives from "@radix-ui/react-dialog" +import * as React from "react" + +import { cx, focusRing } from "@/lib/utils" + +const Dialog = ( + props: React.ComponentPropsWithoutRef, +) => { + return +} +Dialog.displayName = "Dialog" + +const DialogTrigger = DialogPrimitives.Trigger + +DialogTrigger.displayName = "DialogTrigger" + +const DialogClose = DialogPrimitives.Close + +DialogClose.displayName = "DialogClose" + +const DialogPortal = DialogPrimitives.Portal + +DialogPortal.displayName = "DialogPortal" + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + ) +}) + +DialogOverlay.displayName = "DialogOverlay" + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + + + + + ) +}) + +DialogContent.displayName = "DialogContent" + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => { + return
+} + +DialogHeader.displayName = "DialogHeader" + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + +)) + +DialogTitle.displayName = "DialogTitle" + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + ) +}) + +DialogDescription.displayName = "DialogDescription" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( +
+ ) +} + +DialogFooter.displayName = "DialogFooter" + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} diff --git a/src/components/Drawer.tsx b/src/components/Drawer.tsx new file mode 100644 index 0000000..2a31bb9 --- /dev/null +++ b/src/components/Drawer.tsx @@ -0,0 +1,194 @@ +// Tremor Raw Drawer [v0.0.0] + +import * as DrawerPrimitives from "@radix-ui/react-dialog" +import { RiCloseLine } from "@remixicon/react" +import * as React from "react" + +import { cx, focusRing } from "@/lib/utils" +import { Button } from "./Button" + +const Drawer = ( + props: React.ComponentPropsWithoutRef, +) => { + return +} +Drawer.displayName = "Drawer" + +const DrawerTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + return ( + + ) +}) +DrawerTrigger.displayName = "Drawer.Trigger" + +const DrawerClose = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + return ( + + ) +}) +DrawerClose.displayName = "Drawer.Close" + +const DrawerPortal = DrawerPrimitives.Portal + +DrawerPortal.displayName = "DrawerPortal" + +const DrawerOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + ) +}) + +DrawerOverlay.displayName = "DrawerOverlay" + +const DrawerContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + + + + + ) +}) + +DrawerContent.displayName = "DrawerContent" + +const DrawerHeader = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef<"div"> +>(({ children, className, ...props }, ref) => { + return ( +
+
+ {children} +
+ + + +
+ ) +}) + +DrawerHeader.displayName = "Drawer.Header" + +const DrawerTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + +)) + +DrawerTitle.displayName = "DrawerTitle" + +const DrawerBody = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef<"div"> +>(({ className, ...props }, ref) => { + return
+}) +DrawerBody.displayName = "Drawer.Body" + +const DrawerDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + ) +}) + +DrawerDescription.displayName = "DrawerDescription" + +const DrawerFooter = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( +
+ ) +} + +DrawerFooter.displayName = "DrawerFooter" + +export { + Drawer, + DrawerBody, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} diff --git a/src/components/Dropdown.tsx b/src/components/Dropdown.tsx new file mode 100644 index 0000000..409ba0a --- /dev/null +++ b/src/components/Dropdown.tsx @@ -0,0 +1,387 @@ +// Tremor Raw Dropdown Menu [v0.0.0] + +"use client" + +import * as DropdownMenuPrimitives from "@radix-ui/react-dropdown-menu" +import { + RiArrowRightSLine, + RiCheckboxBlankCircleLine, + RiCheckLine, + RiRadioButtonFill, +} from "@remixicon/react" +import * as React from "react" + +import { cx } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitives.Root +DropdownMenu.displayName = "DropdownMenu" + +const DropdownMenuTrigger = DropdownMenuPrimitives.Trigger +DropdownMenuTrigger.displayName = "DropdownMenuTrigger" + +const DropdownMenuGroup = DropdownMenuPrimitives.Group +DropdownMenuGroup.displayName = "DropdownMenuGroup" + +const DropdownMenuSubMenu = DropdownMenuPrimitives.Sub +DropdownMenuSubMenu.displayName = "DropdownMenuSubMenu" + +const DropdownMenuRadioGroup = DropdownMenuPrimitives.RadioGroup +DropdownMenuRadioGroup.displayName = "DropdownMenuRadioGroup" + +const DropdownMenuSubMenuTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, forwardedRef) => ( + + {children} + +)) +DropdownMenuSubMenuTrigger.displayName = "DropdownMenuSubMenuTrigger" + +const DropdownMenuSubMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, collisionPadding = 8, ...props }, forwardedRef) => ( + + + +)) +DropdownMenuSubMenuContent.displayName = "DropdownMenuSubMenuContent" + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>( + ( + { + className, + sideOffset = 8, + collisionPadding = 8, + align = "center", + loop = true, + ...props + }, + forwardedRef, + ) => ( + + + + ), +) +DropdownMenuContent.displayName = "DropdownMenuContent" + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + shortcut?: string + hint?: string + } +>(({ className, shortcut, hint, children, ...props }, forwardedRef) => ( + + {children} + {hint && ( + + {hint} + + )} + {shortcut && ( + + {shortcut} + + )} + +)) +DropdownMenuItem.displayName = "DropdownMenuItem" + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + shortcut?: string + hint?: string + } +>( + ( + { className, hint, shortcut, children, checked, ...props }, + forwardedRef, + ) => ( + + + + + + {children} + {hint && ( + + {hint} + + )} + {shortcut && ( + + {shortcut} + + )} + + ), +) +DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem" + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + shortcut?: string + hint?: string + iconType?: "check" | "radio" + } +>( + ( + { className, hint, shortcut, children, iconType = "radio", ...props }, + forwardedRef, + ) => ( + + {iconType === "radio" ? ( + + + ) : iconType === "check" ? ( + + + ) : null} + {children} + {hint && ( + + {hint} + + )} + {shortcut && ( + + {shortcut} + + )} + + ), +) +DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem" + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + +)) +DropdownMenuLabel.displayName = "DropdownMenuLabel" + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + +)) +DropdownMenuSeparator.displayName = "DropdownMenuSeparator" + +const DropdownMenuIconWrapper = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( +
+ ) +} +DropdownMenuIconWrapper.displayName = "DropdownMenuIconWrapper" + +export { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuIconWrapper, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuSubMenu, + DropdownMenuSubMenuContent, + DropdownMenuSubMenuTrigger, + DropdownMenuTrigger, +} diff --git a/src/components/Input.tsx b/src/components/Input.tsx new file mode 100644 index 0000000..87f0ff6 --- /dev/null +++ b/src/components/Input.tsx @@ -0,0 +1,142 @@ +// Tremor Raw Input [v1.0.0] + +import { RiEyeFill, RiEyeOffFill, RiSearchLine } from "@remixicon/react" +import * as React from "react" +import { tv, type VariantProps } from "tailwind-variants" + +import { cx, focusInput, focusRing, hasErrorInput } from "@/lib/utils" + +const inputStyles = tv({ + base: [ + // base + "relative block w-full appearance-none truncate rounded-md border px-2.5 py-1.5 shadow-sm outline-none transition sm:text-sm", + // border color + "border-gray-300 dark:border-gray-800", + // text color + "text-gray-900 dark:text-gray-50", + // placeholder color + "placeholder-gray-400 dark:placeholder-gray-500", + // background color + "bg-white dark:bg-gray-950", + // disabled + "disabled:border-gray-300 disabled:bg-gray-100 disabled:text-gray-400", + "disabled:dark:border-gray-700 disabled:dark:bg-gray-800 disabled:dark:text-gray-500", + // file + [ + "file:-my-1.5 file:-ml-2.5 file:h-[36px] file:cursor-pointer file:rounded-l-md file:rounded-r-none file:border-0 file:px-3 file:py-1.5 file:outline-none focus:outline-none disabled:pointer-events-none file:disabled:pointer-events-none", + "file:border-solid file:border-gray-300 file:bg-gray-50 file:text-gray-500 file:hover:bg-gray-100 file:dark:border-gray-800 file:dark:bg-gray-950 file:hover:dark:bg-gray-900/20 file:disabled:dark:border-gray-700", + "file:[border-inline-end-width:1px] file:[margin-inline-end:0.75rem]", + "file:disabled:bg-gray-100 file:disabled:text-gray-500 file:disabled:dark:bg-gray-800", + ], + // focus + focusInput, + // invalid (optional) + // "aria-[invalid=true]:dark:ring-red-400/20 aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-red-200 aria-[invalid=true]:border-red-500 invalid:ring-2 invalid:ring-red-200 invalid:border-red-500" + // remove search cancel button (optional) + "[&::--webkit-search-cancel-button]:hidden [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden", + ], + variants: { + hasError: { + true: hasErrorInput, + }, + // number input + enableStepper: { + true: "[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none", + }, + }, +}) + +interface InputProps + extends React.InputHTMLAttributes, + VariantProps { + inputClassName?: string +} + +const Input = React.forwardRef( + ( + { + className, + inputClassName, + hasError, + enableStepper, + type, + ...props + }: InputProps, + forwardedRef, + ) => { + const [typeState, setTypeState] = React.useState(type) + + const isPassword = type === "password" + const isSearch = type === "search" + + return ( +
+ + {isSearch && ( +
+
+ )} + {isPassword && ( +
+ +
+ )} +
+ ) + }, +) + +Input.displayName = "Input" + +export { Input, inputStyles, type InputProps } diff --git a/src/components/Label.tsx b/src/components/Label.tsx new file mode 100644 index 0000000..6ca522a --- /dev/null +++ b/src/components/Label.tsx @@ -0,0 +1,36 @@ +// Tremor Raw Label [v0.0.1] + +import * as LabelPrimitives from "@radix-ui/react-label" +import * as React from "react" + +import { cx } from "@/lib/utils" + +interface LabelProps + extends React.ComponentPropsWithoutRef { + disabled?: boolean +} + +const Label = React.forwardRef< + React.ElementRef, + LabelProps +>(({ className, disabled, ...props }, forwardedRef) => ( + +)) +Label.displayName = "Label" + +export { Label } diff --git a/src/components/LineChart.tsx b/src/components/LineChart.tsx new file mode 100644 index 0000000..ff174e4 --- /dev/null +++ b/src/components/LineChart.tsx @@ -0,0 +1,934 @@ +// Tremor Raw LineChart [v0.0.0] + +"use client" + +import { RiArrowLeftSLine, RiArrowRightSLine } from "@remixicon/react" +import React from "react" +import { + CartesianGrid, + Dot, + Label, + Line, + Legend as RechartsLegend, + LineChart as RechartsLineChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from "recharts" +import { AxisDomain } from "recharts/types/util/types" + +import { + AvailableChartColors, + AvailableChartColorsKeys, + constructCategoryColors, + getColorClassName, + getYAxisDomain, + hasOnlyOneValueForKey, +} from "@/lib/chartUtils" +import { useOnWindowResize } from "@/lib/useOnWindowResize" +import { cx, percentageFormatter } from "@/lib/utils" +import { Badge } from "./Badge" +import { getBadgeType } from "./ui/overview/DashboardChartCard" + +//#region Legend + +interface LegendItemProps { + name: string + color: AvailableChartColorsKeys + onClick?: (name: string, color: AvailableChartColorsKeys) => void + activeLegend?: string +} + +const LegendItem = ({ + name, + color, + onClick, + activeLegend, +}: LegendItemProps) => { + const hasOnValueChange = !!onClick + return ( +
  • { + e.stopPropagation() + onClick?.(name, color) + }} + > +
  • + ) +} + +interface ScrollButtonProps { + icon: React.ElementType + onClick?: () => void + disabled?: boolean +} + +const ScrollButton = ({ icon, onClick, disabled }: ScrollButtonProps) => { + const Icon = icon + const [isPressed, setIsPressed] = React.useState(false) + const intervalRef = React.useRef(null) + + React.useEffect(() => { + if (isPressed) { + intervalRef.current = setInterval(() => { + onClick?.() + }, 300) + } else { + clearInterval(intervalRef.current as NodeJS.Timeout) + } + return () => clearInterval(intervalRef.current as NodeJS.Timeout) + }, [isPressed, onClick]) + + React.useEffect(() => { + if (disabled) { + clearInterval(intervalRef.current as NodeJS.Timeout) + setIsPressed(false) + } + }, [disabled]) + + return ( + + ) +} + +interface LegendProps extends React.OlHTMLAttributes { + categories: string[] + colors?: AvailableChartColorsKeys[] + onClickLegendItem?: (category: string, color: string) => void + activeLegend?: string + enableLegendSlider?: boolean +} + +type HasScrollProps = { + left: boolean + right: boolean +} + +const Legend = React.forwardRef((props, ref) => { + const { + categories, + colors = AvailableChartColors, + className, + onClickLegendItem, + activeLegend, + enableLegendSlider = false, + ...other + } = props + const scrollableRef = React.useRef(null) + const [hasScroll, setHasScroll] = React.useState(null) + const [isKeyDowned, setIsKeyDowned] = React.useState(null) + const intervalRef = React.useRef(null) + + const checkScroll = React.useCallback(() => { + const scrollable = scrollableRef?.current + if (!scrollable) return + + const hasLeftScroll = scrollable.scrollLeft > 0 + const hasRightScroll = + scrollable.scrollWidth - scrollable.clientWidth > scrollable.scrollLeft + + setHasScroll({ left: hasLeftScroll, right: hasRightScroll }) + }, [setHasScroll]) + + const scrollToTest = React.useCallback( + (direction: "left" | "right") => { + const element = scrollableRef?.current + const width = element?.clientWidth ?? 0 + + if (element && enableLegendSlider) { + element.scrollTo({ + left: + direction === "left" + ? element.scrollLeft - width + : element.scrollLeft + width, + behavior: "smooth", + }) + setTimeout(() => { + checkScroll() + }, 400) + } + }, + [enableLegendSlider, checkScroll], + ) + + React.useEffect(() => { + const keyDownHandler = (key: string) => { + if (key === "ArrowLeft") { + scrollToTest("left") + } else if (key === "ArrowRight") { + scrollToTest("right") + } + } + if (isKeyDowned) { + keyDownHandler(isKeyDowned) + intervalRef.current = setInterval(() => { + keyDownHandler(isKeyDowned) + }, 300) + } else { + clearInterval(intervalRef.current as NodeJS.Timeout) + } + return () => clearInterval(intervalRef.current as NodeJS.Timeout) + }, [isKeyDowned, scrollToTest]) + + const keyDown = (e: KeyboardEvent) => { + e.stopPropagation() + if (e.key === "ArrowLeft" || e.key === "ArrowRight") { + e.preventDefault() + setIsKeyDowned(e.key) + } + } + const keyUp = (e: KeyboardEvent) => { + e.stopPropagation() + setIsKeyDowned(null) + } + + React.useEffect(() => { + const scrollable = scrollableRef?.current + if (enableLegendSlider) { + checkScroll() + scrollable?.addEventListener("keydown", keyDown) + scrollable?.addEventListener("keyup", keyUp) + } + + return () => { + scrollable?.removeEventListener("keydown", keyDown) + scrollable?.removeEventListener("keyup", keyUp) + } + }, [checkScroll, enableLegendSlider]) + + return ( +
      +
      + {categories.map((category, index) => ( + + ))} +
      + {enableLegendSlider && (hasScroll?.right || hasScroll?.left) ? ( + <> +
      + { + setIsKeyDowned(null) + scrollToTest("left") + }} + disabled={!hasScroll?.left} + /> + { + setIsKeyDowned(null) + scrollToTest("right") + }} + disabled={!hasScroll?.right} + /> +
      + + ) : null} +
    + ) +}) + +Legend.displayName = "Legend" + +const ChartLegend = ( + { payload }: any, + categoryColors: Map, + setLegendHeight: React.Dispatch>, + activeLegend: string | undefined, + onClick?: (category: string, color: string) => void, + enableLegendSlider?: boolean, +) => { + const legendRef = React.useRef(null) + + useOnWindowResize(() => { + const calculateHeight = (height: number | undefined) => + height ? Number(height) + 15 : 60 + setLegendHeight(calculateHeight(legendRef.current?.clientHeight)) + }) + + const filteredPayload = payload.filter((item: any) => item.type !== "none") + + return ( +
    + entry.value)} + colors={filteredPayload.map((entry: any) => + categoryColors.get(entry.value), + )} + onClickLegendItem={onClick} + activeLegend={activeLegend} + enableLegendSlider={enableLegendSlider} + /> +
    + ) +} + +//#region Tooltip + +interface ChartTooltipRowProps { + value: string + name: string + color: string +} + +const ChartTooltipRow = ({ value, name, color }: ChartTooltipRowProps) => ( +
    +
    +
    +

    + {value} +

    +
    +) + +interface ChartTooltipProps { + active: boolean | undefined + payload: any + label: string + categoryColors: Map + valueFormatter: (value: number) => string +} + +const OverviewChartTooltip = ({ + active, + payload, + label, + categoryColors, + valueFormatter, +}: ChartTooltipProps) => { + if (active && payload) { + const filteredPayload = payload.filter((item: any) => item.type !== "none") + + if (!active || !payload) return null + + const title = payload[0].payload.title + const evolution = payload[0].payload.evolution + if (!title) return null + + return ( +
    +
    +

    + {title} +

    + {evolution !== undefined && ( + + {percentageFormatter(evolution)} + + )} +
    +
    + {filteredPayload.map((payload: any, index: number) => { + const payloadData = payload.payload + return ( + + ) + })} +
    +
    + ) + } + return null +} + +// Standard tooltip below without percentage change logic + +const ChartTooltip = ({ + active, + payload, + label, + categoryColors, + valueFormatter, +}: ChartTooltipProps) => { + if (active && payload) { + const filteredPayload = payload.filter((item: any) => item.type !== "none") + + return ( +
    +
    +

    + {label} +

    +
    + +
    + {filteredPayload.map( + ( + { value, name }: { value: number; name: string }, + index: number, + ) => ( + + ), + )} +
    +
    + ) + } + return null +} + +//#region LineChart + +interface ActiveDot { + index?: number + dataKey?: string +} + +type BaseEventProps = { + eventType: "dot" | "category" + categoryClicked: string + [key: string]: number | string +} + +type LineChartEventProps = BaseEventProps | null | undefined + +interface LineChartProps extends React.HTMLAttributes { + data: Record[] + index: string + categories: string[] + colors?: AvailableChartColorsKeys[] + valueFormatter?: (value: number) => string + startEndOnly?: boolean + showXAxis?: boolean + showYAxis?: boolean + showGridLines?: boolean + yAxisWidth?: number + intervalType?: "preserveStartEnd" | "equidistantPreserveStart" + showTooltip?: boolean + showLegend?: boolean + autoMinValue?: boolean + minValue?: number + maxValue?: number + allowDecimals?: boolean + onValueChange?: (value: LineChartEventProps) => void + enableLegendSlider?: boolean + tickGap?: number + connectNulls?: boolean + xAxisLabel?: string + yAxisLabel?: string +} + +const LineChart = React.forwardRef( + (props, ref) => { + const { + data = [], + categories = [], + index, + colors = AvailableChartColors, + valueFormatter = (value: number) => value.toString(), + startEndOnly = false, + showXAxis = true, + showYAxis = true, + showGridLines = true, + yAxisWidth = 56, + intervalType = "equidistantPreserveStart", + showTooltip = true, + showLegend = true, + autoMinValue = false, + minValue, + maxValue, + allowDecimals = true, + connectNulls = false, + className, + onValueChange, + enableLegendSlider = false, + tickGap = 5, + xAxisLabel, + yAxisLabel, + ...other + } = props + const paddingValue = !showXAxis && !showYAxis ? 0 : 20 + const [legendHeight, setLegendHeight] = React.useState(60) + const [activeDot, setActiveDot] = React.useState( + undefined, + ) + const [activeLegend, setActiveLegend] = React.useState( + undefined, + ) + const categoryColors = constructCategoryColors(categories, colors) + + const yAxisDomain = getYAxisDomain(autoMinValue, minValue, maxValue) + const hasOnValueChange = !!onValueChange + + function onDotClick(itemData: any, event: React.MouseEvent) { + event.stopPropagation() + + if (!hasOnValueChange) return + if ( + (itemData.index === activeDot?.index && + itemData.dataKey === activeDot?.dataKey) || + (hasOnlyOneValueForKey(data, itemData.dataKey) && + activeLegend && + activeLegend === itemData.dataKey) + ) { + setActiveLegend(undefined) + setActiveDot(undefined) + onValueChange?.(null) + } else { + setActiveLegend(itemData.dataKey) + setActiveDot({ + index: itemData.index, + dataKey: itemData.dataKey, + }) + onValueChange?.({ + eventType: "dot", + categoryClicked: itemData.dataKey, + ...itemData.payload, + }) + } + } + + function onCategoryClick(dataKey: string) { + if (!hasOnValueChange) return + if ( + (dataKey === activeLegend && !activeDot) || + (hasOnlyOneValueForKey(data, dataKey) && + activeDot && + activeDot.dataKey === dataKey) + ) { + setActiveLegend(undefined) + onValueChange?.(null) + } else { + setActiveLegend(dataKey) + onValueChange?.({ + eventType: "category", + categoryClicked: dataKey, + }) + } + setActiveDot(undefined) + } + + return ( +
    + + { + setActiveDot(undefined) + setActiveLegend(undefined) + onValueChange?.(null) + } + : undefined + } + margin={{ + bottom: xAxisLabel ? 30 : undefined, + left: yAxisLabel ? 20 : undefined, + right: yAxisLabel ? 5 : undefined, + top: 0, + }} + > + {showGridLines ? ( + + ) : null} + + {xAxisLabel && ( + + )} + + + {yAxisLabel && ( + + )} + + ( + + ) + ) : ( + <> + ) + } + /> + {showLegend ? ( + + ChartLegend( + { payload }, + categoryColors, + setLegendHeight, + activeLegend, + hasOnValueChange + ? (clickedLegendItem: string) => + onCategoryClick(clickedLegendItem) + : undefined, + enableLegendSlider, + ) + } + /> + ) : null} + {categories.map((category) => ( + { + const { + cx: cxCoord, + cy: cyCoord, + stroke, + strokeLinecap, + strokeLinejoin, + strokeWidth, + dataKey, + } = props + return ( + onDotClick(props, event)} + /> + ) + }} + dot={(props: any) => { + const { + stroke, + strokeLinecap, + strokeLinejoin, + strokeWidth, + cx: cxCoord, + cy: cyCoord, + dataKey, + index, + } = props + + if ( + (hasOnlyOneValueForKey(data, category) && + !( + activeDot || + (activeLegend && activeLegend !== category) + )) || + (activeDot?.index === index && + activeDot?.dataKey === category) + ) { + return ( + + ) + } + return + }} + key={category} + name={category} + type="linear" + dataKey={category} + stroke="" + strokeWidth={2} + strokeLinejoin="round" + strokeLinecap="round" + isAnimationActive={false} + connectNulls={connectNulls} + /> + ))} + {/* hidden lines to increase clickable target area */} + {onValueChange + ? categories.map((category) => ( + { + event.stopPropagation() + const { name } = props + onCategoryClick(name) + }} + /> + )) + : null} + + +
    + ) + }, +) + +LineChart.displayName = "LineChart" + +export { LineChart, type LineChartEventProps } diff --git a/src/components/Popover.tsx b/src/components/Popover.tsx new file mode 100644 index 0000000..c55f109 --- /dev/null +++ b/src/components/Popover.tsx @@ -0,0 +1,109 @@ +// Tremor Raw Popover [v0.0.0] + +import * as PopoverPrimitives from "@radix-ui/react-popover" +import * as React from "react" + +import { cx } from "@/lib/utils" + +const Popover = ( + props: React.ComponentPropsWithoutRef, +) => { + return +} + +Popover.displayName = "Popover" + +const PopoverTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, forwardedRef) => { + return +}) + +PopoverTrigger.displayName = "PopoverTrigger" + +const PopoverAnchor = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, forwardedRef) => { + return +}) + +PopoverAnchor.displayName = "PopoverAnchor" + +const PopoverClose = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, forwardedRef) => { + return +}) + +PopoverClose.displayName = "PopoverClose" + +interface ContentProps + extends React.ComponentPropsWithoutRef {} + +const PopoverContent = React.forwardRef< + React.ElementRef, + ContentProps +>( + ( + { + className, + sideOffset = 10, + side = "bottom", + align = "center", + collisionPadding, + avoidCollisions, + ...props + }: ContentProps, + forwardedRef, + ) => { + return ( + + { + event.stopPropagation() + const isScrollingDown = event.deltaY > 0 + if (isScrollingDown) { + event.currentTarget.dispatchEvent( + new KeyboardEvent("keydown", { key: "ArrowDown" }), + ) + } else { + event.currentTarget.dispatchEvent( + new KeyboardEvent("keydown", { key: "ArrowUp" }), + ) + } + }} + {...props} + /> + + ) + }, +) +PopoverContent.displayName = "PopoverContent" + +// export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } diff --git a/src/components/ProgressBar.tsx b/src/components/ProgressBar.tsx new file mode 100644 index 0000000..1d85e01 --- /dev/null +++ b/src/components/ProgressBar.tsx @@ -0,0 +1,108 @@ +// Tremor Raw ProgressBar [v0.0.0] + +import * as React from "react" +import { tv, type VariantProps } from "tailwind-variants" + +import { cx } from "@/lib/utils" + +const progressBarVariants = tv({ + slots: { + background: "", + bar: "", + }, + variants: { + variant: { + default: { + background: "bg-indigo-100 dark:bg-indigo-500/30", + bar: "bg-indigo-600 dark:bg-indigo-500", + }, + neutral: { + background: "bg-gray-200 dark:bg-gray-500/40", + bar: "bg-gray-500 dark:bg-gray-500", + }, + warning: { + background: "bg-yellow-200 dark:bg-yellow-500/30", + bar: "bg-yellow-500 dark:bg-yellow-500", + }, + error: { + background: "bg-red-200 dark:bg-red-500/30", + bar: "bg-red-500 dark:bg-red-500", + }, + success: { + background: "bg-emerald-200 dark:bg-emerald-500/30", + bar: "bg-emerald-500 dark:bg-emerald-500", + }, + }, + }, + defaultVariants: { + variant: "default", + }, +}) + +interface ProgressBarProps + extends React.HTMLProps, + VariantProps { + value?: number + max?: number + showAnimation?: boolean + label?: string +} + +const ProgressBar = React.forwardRef( + ( + { + value = 0, + max = 100, + label, + showAnimation = false, + variant, + className, + ...props + }: ProgressBarProps, + forwardedRef, + ) => { + const safeValue = Math.min(max, Math.max(value, 0)) + const { background, bar } = progressBarVariants({ variant }) + return ( +
    +
    +
    +
    + {label ? ( + + {label} + + ) : null} +
    + ) + }, +) + +ProgressBar.displayName = "ProgressBar" + +export { ProgressBar, progressBarVariants, type ProgressBarProps } diff --git a/src/components/RadioCard.tsx b/src/components/RadioCard.tsx new file mode 100644 index 0000000..61dda9c --- /dev/null +++ b/src/components/RadioCard.tsx @@ -0,0 +1,93 @@ +// Tremor Raw Radio Card [v0.0.0] + +import * as RadioGroupPrimitives from "@radix-ui/react-radio-group" +import * as React from "react" + +import { cx, focusInput, focusRing } from "@/lib/utils" + +const RadioCardGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( + + ) +}) +RadioCardGroup.displayName = "RadioCardGroup" + +const RadioCardGroupIndicator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => { + return ( +
    + +
    + +
    + ) +}) +RadioCardGroupIndicator.displayName = "RadioCardGroupIndicator" + +const RadioCardItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, forwardedRef) => { + return ( + + {children} + + ) +}) +RadioCardItem.displayName = "RadioCardItem" + +export { RadioCardGroup, RadioCardGroupIndicator, RadioCardItem } diff --git a/src/components/Select.tsx b/src/components/Select.tsx new file mode 100644 index 0000000..44bf20f --- /dev/null +++ b/src/components/Select.tsx @@ -0,0 +1,311 @@ +// Tremor Raw Select [v0.0.0] + +import * as SelectPrimitives from "@radix-ui/react-select" +import { RiArrowDownSLine, RiArrowUpSLine, RiCheckLine } from "@remixicon/react" +import { format } from "date-fns" +import React from "react" + +import { cx, focusInput, hasErrorInput } from "@/lib/utils" +import { DateRange } from "react-day-picker" + +const Select = SelectPrimitives.Root +Select.displayName = "Select" + +const SelectGroup = SelectPrimitives.Group +SelectGroup.displayName = "SelectGroup" + +const SelectValue = SelectPrimitives.Value +SelectValue.displayName = "SelectValue" + +const selectTriggerStyles = [ + cx( + // base + "group/trigger flex w-full select-none items-center justify-between gap-x-2 truncate rounded-md border px-3 py-1.5 text-base shadow-sm outline-none transition sm:text-sm", + // border color + "border-gray-300 dark:border-gray-800", + // text color + "text-gray-900 dark:text-gray-50", + // placeholder + "data-[placeholder]:text-gray-400 data-[placeholder]:dark:text-gray-500", + // background color + "bg-white dark:bg-gray-950", + // hover + "hover:bg-gray-50 hover:dark:bg-gray-950/50", + // disabled + "data-[disabled]:bg-gray-100 data-[disabled]:text-gray-400", + "data-[disabled]:dark:border-gray-700 data-[disabled]:dark:bg-gray-800 data-[disabled]:dark:text-gray-500", + focusInput, + // invalid (optional) + // "aria-[invalid=true]:dark:ring-red-400/20 aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-red-200 aria-[invalid=true]:border-red-500 invalid:ring-2 invalid:ring-red-200 invalid:border-red-500" + ), +] + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + hasError?: boolean + } +>(({ className, hasError, children, ...props }, forwardedRef) => { + return ( + + {children} + + + + + ) +}) + +SelectTrigger.displayName = "SelectTrigger" + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + + +)) +SelectScrollUpButton.displayName = SelectPrimitives.ScrollUpButton.displayName + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + + +)) +SelectScrollDownButton.displayName = + SelectPrimitives.ScrollDownButton.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>( + ( + { + className, + position = "popper", + children, + sideOffset = 8, + collisionPadding = 10, + ...props + }, + forwardedRef, + ) => ( + + + + + {children} + + + + + ), +) + +SelectContent.displayName = "SelectContent" + +const SelectGroupLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + +)) + +SelectGroupLabel.displayName = "SelectGroupLabel" + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, forwardedRef) => { + return ( + + + {children} + + + + + ) +}) + +SelectItem.displayName = "SelectItem" + +const SelectItemPeriod = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + period?: DateRange | undefined + } +>(({ className, children, period, ...props }, forwardedRef) => { + return ( + + + + + +
    + {/* adapt width accordingly if you use longer names for periods */} + + {children} + + + {period?.from && period?.to && ( + + {format(period.from, "MMM d, yyyy")} –{" "} + {format(period.to, "MMM d, yyyy")} + + )} + +
    +
    + ) +}) + +SelectItemPeriod.displayName = "SelectItemPeriod" + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, forwardedRef) => ( + +)) + +SelectSeparator.displayName = "SelectSeparator" + +export { + Select, + SelectContent, + SelectGroup, + SelectGroupLabel, + SelectItem, + SelectItemPeriod, + SelectSeparator, + SelectTrigger, + SelectValue, +} diff --git a/src/components/ui/icons/ArrowAnimated.tsx b/src/components/ui/icons/ArrowAnimated.tsx new file mode 100644 index 0000000..dc4f9d3 --- /dev/null +++ b/src/components/ui/icons/ArrowAnimated.tsx @@ -0,0 +1,28 @@ +import { cx } from "@/lib/utils" + +export function ArrowAnimated({ + className, + ...props +}: React.HTMLAttributes) { + return ( + + ) +} diff --git a/src/components/ui/icons/TremorPlaceholder.tsx b/src/components/ui/icons/TremorPlaceholder.tsx new file mode 100644 index 0000000..1d57335 --- /dev/null +++ b/src/components/ui/icons/TremorPlaceholder.tsx @@ -0,0 +1,62 @@ +import type { SVGProps } from "react" + +export const TremorPlaceholder = (props: SVGProps) => ( + + + + + + + + + + + + + + + + + + + + + + +) diff --git a/src/components/ui/navigation/DropdownUserProfile.tsx b/src/components/ui/navigation/DropdownUserProfile.tsx new file mode 100644 index 0000000..3a1d463 --- /dev/null +++ b/src/components/ui/navigation/DropdownUserProfile.tsx @@ -0,0 +1,126 @@ +"use client" + +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuSubMenu, + DropdownMenuSubMenuContent, + DropdownMenuSubMenuTrigger, + DropdownMenuTrigger, +} from "@/components/Dropdown" +import { + RiArrowRightUpLine, + RiComputerLine, + RiMoonLine, + RiSunLine, +} from "@remixicon/react" +import { useTheme } from "next-themes" +import * as React from "react" + +export type DropdownUserProfileProps = { + children: React.ReactNode + align?: "center" | "start" | "end" +} + +export function DropdownUserProfile({ + children, + align = "start", +}: DropdownUserProfileProps) { + const [mounted, setMounted] = React.useState(false) + const { theme, setTheme } = useTheme() + React.useEffect(() => { + setMounted(true) + }, []) + + if (!mounted) { + return null + } + return ( + <> + + {children} + + emma.stone@acme.com + + + Theme + + { + setTheme(value) + }} + > + + + + + + + + + + + + + + Changelog + + + Documentation + + + Join Slack community + + + + + Sign out + + + + + ) +} diff --git a/src/components/ui/navigation/MobileSidebar.tsx b/src/components/ui/navigation/MobileSidebar.tsx new file mode 100644 index 0000000..1b8917e --- /dev/null +++ b/src/components/ui/navigation/MobileSidebar.tsx @@ -0,0 +1,145 @@ +import { siteConfig } from "@/app/siteConfig" +import { Button } from "@/components/Button" +import { + Drawer, + DrawerBody, + DrawerClose, + DrawerContent, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from "@/components/Drawer" +import { cx, focusRing } from "@/lib/utils" +import { + RiHome2Line, + RiLinkM, + RiListCheck, + RiMenuLine, + RiSettings5Line, +} from "@remixicon/react" +import Link from "next/link" +import { usePathname } from "next/navigation" + +const navigation = [ + { name: "Overview", href: siteConfig.baseLinks.overview, icon: RiHome2Line }, + { name: "Details", href: siteConfig.baseLinks.details, icon: RiListCheck }, + { + name: "Settings", + href: siteConfig.baseLinks.settings, + icon: RiSettings5Line, + }, +] as const + +const shortcuts = [ + { + name: "Add new user", + href: "#", + icon: RiLinkM, + }, + { + name: "Workspace usage", + href: "#", + icon: RiLinkM, + }, + { + name: "Cost spend control", + href: "#", + icon: RiLinkM, + }, + { + name: "Overview – Rows written", + href: "#", + icon: RiLinkM, + }, +] as const + +export default function MobileSidebar() { + const pathname = usePathname() + const isActive = (itemHref: string) => { + if (itemHref === siteConfig.baseLinks.settings) { + return pathname.startsWith("/settings") + } + return pathname === itemHref || pathname.startsWith(itemHref) + } + return ( + <> + + + + + + + Retail Analytics + + + + + + + + ) +} diff --git a/src/components/ui/navigation/ModalAddWorkspace.tsx b/src/components/ui/navigation/ModalAddWorkspace.tsx new file mode 100644 index 0000000..2193a50 --- /dev/null +++ b/src/components/ui/navigation/ModalAddWorkspace.tsx @@ -0,0 +1,202 @@ +import { Badge } from "@/components/Badge" +import { Button } from "@/components/Button" +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/Dialog" +import { DropdownMenuItem } from "@/components/Dropdown" +import { Input } from "@/components/Input" +import { Label } from "@/components/Label" +import { + RadioCardGroup, + RadioCardGroupIndicator, + RadioCardItem, +} from "@/components/RadioCard" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/Select" + +export const databases: { + label: string + value: string + description: string + isRecommended: boolean +}[] = [ + { + label: "Base performance", + value: "base-performance", + description: "1/8 vCPU, 1 GB RAM", + isRecommended: true, + }, + { + label: "Advanced performance", + value: "advanced-performance", + description: "1/4 vCPU, 2 GB RAM", + isRecommended: false, + }, + { + label: "Turbo performance", + value: "turbo-performance", + description: "1/2 vCPU, 4 GB RAM", + isRecommended: false, + }, +] + +export type ModalProps = { + itemName: string + onSelect: () => void + onOpenChange: (open: boolean) => void +} + +export function ModalAddWorkspace({ + itemName, + onSelect, + onOpenChange, +}: ModalProps) { + return ( + <> + + + { + event.preventDefault() + onSelect && onSelect() + }} + > + {itemName} + + + +
    + + Add new workspace + + With free plan, you can add up to 10 workspaces. + +
    +
    + + +
    +
    + + +
    +
    + + +

    + For best performance, choose a region closest to your + application. +

    +
    +
    +
    + + + {databases.map((database) => ( + +
    + +
    + {database.isRecommended ? ( +
    + + {database.label} + + Recommended +
    + ) : ( + {database.label} + )} +

    + 1/8 vCPU, 1 GB RAM +

    +
    +
    +
    + ))} +
    +
    +
    + + + + + + + + +
    +
    +
    + + ) +} diff --git a/src/components/ui/navigation/SidebarWorkspacesDropdown.tsx b/src/components/ui/navigation/SidebarWorkspacesDropdown.tsx new file mode 100644 index 0000000..5441d48 --- /dev/null +++ b/src/components/ui/navigation/SidebarWorkspacesDropdown.tsx @@ -0,0 +1,229 @@ +"use client" + +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/Dropdown" +import { cx, focusInput } from "@/lib/utils" +import { RiArrowRightSLine, RiExpandUpDownLine } from "@remixicon/react" +import React from "react" +import { ModalAddWorkspace } from "./ModalAddWorkspace" + +const workspaces = [ + { + value: "retail-analytics", + name: "Retail analytics", + initials: "RA", + role: "Member", + color: "bg-indigo-600 dark:bg-indigo-500", + }, + // Add more workspaces... +] + +export const WorkspacesDropdownDesktop = () => { + const [dropdownOpen, setDropdownOpen] = React.useState(false) + const [hasOpenDialog, setHasOpenDialog] = React.useState(false) + const dropdownTriggerRef = React.useRef(null) + const focusRef = React.useRef(null) + + const handleDialogItemSelect = () => { + focusRef.current = dropdownTriggerRef.current + } + + const handleDialogItemOpenChange = (open: boolean) => { + setHasOpenDialog(open) + if (open === false) { + setDropdownOpen(false) + } + } + return ( + <> + {/* sidebar (lg+) */} + + + + + + + + ) +} + +export const WorkspacesDropdownMobile = () => { + const [dropdownOpen, setDropdownOpen] = React.useState(false) + const [hasOpenDialog, setHasOpenDialog] = React.useState(false) + const dropdownTriggerRef = React.useRef(null) + const focusRef = React.useRef(null) + + const handleDialogItemSelect = () => { + focusRef.current = dropdownTriggerRef.current + } + + const handleDialogItemOpenChange = (open: boolean) => { + setHasOpenDialog(open) + if (open === false) { + setDropdownOpen(false) + } + } + return ( + <> + {/* sidebar (xs-lg) */} + + + + + + + + ) +} diff --git a/src/components/ui/navigation/UserProfile.tsx b/src/components/ui/navigation/UserProfile.tsx new file mode 100644 index 0000000..447637a --- /dev/null +++ b/src/components/ui/navigation/UserProfile.tsx @@ -0,0 +1,57 @@ +"use client" + +import { Button } from "@/components/Button" +import { cx, focusRing } from "@/lib/utils" +import { RiMore2Fill } from "@remixicon/react" + +import { DropdownUserProfile } from "./DropdownUserProfile" + +export const UserProfileDesktop = () => { + return ( + + + + ) +} + +export const UserProfileMobile = () => { + return ( + + + + ) +} diff --git a/src/components/ui/navigation/sidebar.tsx b/src/components/ui/navigation/sidebar.tsx new file mode 100644 index 0000000..e063392 --- /dev/null +++ b/src/components/ui/navigation/sidebar.tsx @@ -0,0 +1,132 @@ +"use client" +import { siteConfig } from "@/app/siteConfig" +import { cx, focusRing } from "@/lib/utils" +import { + RiHome2Line, + RiLinkM, + RiListCheck, + RiSettings5Line, +} from "@remixicon/react" +import Link from "next/link" +import { usePathname } from "next/navigation" +import MobileSidebar from "./MobileSidebar" +import { + WorkspacesDropdownDesktop, + WorkspacesDropdownMobile, +} from "./SidebarWorkspacesDropdown" +import { UserProfileDesktop, UserProfileMobile } from "./UserProfile" + +const navigation = [ + { name: "Overview", href: siteConfig.baseLinks.overview, icon: RiHome2Line }, + { name: "Details", href: siteConfig.baseLinks.details, icon: RiListCheck }, + { + name: "Settings", + href: siteConfig.baseLinks.settings, + icon: RiSettings5Line, + }, +] as const + +const shortcuts = [ + { + name: "Add new user", + href: "#", + icon: RiLinkM, + }, + { + name: "Workspace usage", + href: "#", + icon: RiLinkM, + }, + { + name: "Cost spend control", + href: "#", + icon: RiLinkM, + }, + { + name: "Overview – Rows written", + href: "#", + icon: RiLinkM, + }, +] as const + +export function Sidebar() { + const pathname = usePathname() + const isActive = (itemHref: string) => { + if (itemHref === siteConfig.baseLinks.settings) { + return pathname.startsWith("/settings") + } + return pathname === itemHref || pathname.startsWith(itemHref) + } + return ( + <> + {/* sidebar (lg+) */} + + {/* top navbar (xs-lg) */} +
    + +
    + + +
    +
    + + ) +} diff --git a/src/components/ui/overview/DashboardCategoryBarCard.tsx b/src/components/ui/overview/DashboardCategoryBarCard.tsx new file mode 100644 index 0000000..29a876b --- /dev/null +++ b/src/components/ui/overview/DashboardCategoryBarCard.tsx @@ -0,0 +1,85 @@ +import { Badge } from "@/components/Badge" +import { cx } from "@/lib/utils" + +import type { KpiEntryExtended } from "@/app/(main)/overview/page" + +export type CardProps = { + title: string + change: string + value: string + valueDescription: string + subtitle: string + ctaDescription: string + ctaText: string + ctaLink: string + data: KpiEntryExtended[] +} + +export function CategoryBarCard({ + title, + change, + value, + valueDescription, + subtitle, + ctaDescription, + ctaText, + ctaLink, + data, +}: CardProps) { + return ( + <> +
    +
    +
    +

    + {title} +

    + {change} +
    +

    + + {value} + + {valueDescription} +

    +
    +

    + {subtitle} +

    +
    + {data.map((item) => ( +
    + ))} +
    +
    +
      + {data.map((item) => ( +
    • +
    • + ))} +
    +
    +

    + {ctaDescription}{" "} + + {ctaText} + +

    +
    + + ) +} diff --git a/src/components/ui/overview/DashboardChartCard.tsx b/src/components/ui/overview/DashboardChartCard.tsx new file mode 100644 index 0000000..c6c302b --- /dev/null +++ b/src/components/ui/overview/DashboardChartCard.tsx @@ -0,0 +1,159 @@ +import { PeriodValue } from "@/app/(main)/overview/page" +import { Badge } from "@/components/Badge" +import { LineChart } from "@/components/LineChart" +import { overviews } from "@/data/overview-data" +import { OverviewData } from "@/data/schema" +import { cx, formatters, percentageFormatter } from "@/lib/utils" +import { + eachDayOfInterval, + formatDate, + interval, + isWithinInterval, +} from "date-fns" +import { DateRange } from "react-day-picker" +import { getPeriod } from "./DashboardFilterbar" + +export type CardProps = { + title: keyof OverviewData + type: "currency" | "unit" + selectedDates: DateRange | undefined + selectedPeriod: PeriodValue + isThumbnail?: boolean +} + +const formattingMap = { + currency: formatters.currency, + unit: formatters.unit, +} + +export const getBadgeType = (value: number) => { + if (value > 0) { + return "success" + } else if (value < 0) { + if (value < -50) { + return "warning" + } + return "error" + } else { + return "neutral" + } +} + +export function ChartCard({ + title, + type, + selectedDates, + selectedPeriod, + isThumbnail, +}: CardProps) { + const formatter = formattingMap[type] + const selectedDatesInterval = + selectedDates?.from && selectedDates?.to + ? interval(selectedDates.from, selectedDates.to) + : null + const allDatesInInterval = + selectedDates?.from && selectedDates?.to + ? eachDayOfInterval(interval(selectedDates.from, selectedDates.to)) + : null + const prevDates = getPeriod(selectedDates) + + const prevDatesInterval = + prevDates?.from && prevDates?.to + ? interval(prevDates.from, prevDates.to) + : null + + const data = overviews + .filter((overview) => { + if (selectedDatesInterval) { + return isWithinInterval(overview.date, selectedDatesInterval) + } + return true + }) + .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) + + const prevData = overviews + .filter((overview) => { + if (prevDatesInterval) { + return isWithinInterval(overview.date, prevDatesInterval) + } + return false + }) + .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) + + const chartData = allDatesInInterval + ?.map((date, index) => { + const overview = data[index] + const prevOverview = prevData[index] + const value = (overview?.[title] as number) || null + const previousValue = (prevOverview?.[title] as number) || null + + return { + title, + date: date, + formattedDate: formatDate(date, "dd/MM/yyyy"), + value, + previousDate: prevOverview?.date, + previousFormattedDate: prevOverview + ? formatDate(prevOverview.date, "dd/MM/yyyy") + : null, + previousValue: + selectedPeriod !== "no-comparison" ? previousValue : null, + evolution: + selectedPeriod !== "no-comparison" && value && previousValue + ? (value - previousValue) / previousValue + : undefined, + } + }) + .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) + + const categories = + selectedPeriod === "no-comparison" ? ["value"] : ["value", "previousValue"] + const value = + chartData?.reduce((acc, item) => acc + (item.value || 0), 0) || 0 + const previousValue = + chartData?.reduce((acc, item) => acc + (item.previousValue || 0), 0) || 0 + const evolution = + selectedPeriod !== "no-comparison" + ? (value - previousValue) / previousValue + : 0 + + return ( +
    +
    +
    +
    + {title} +
    + {selectedPeriod !== "no-comparison" && ( + + {percentageFormatter(evolution)} + + )} +
    +
    +
    +
    + {formatter(value)} +
    + {selectedPeriod !== "no-comparison" && ( +
    + from {formatter(previousValue)} +
    + )} +
    + formatter(value as number)} + showYAxis={false} + showLegend={false} + categories={categories} + showTooltip={isThumbnail ? false : true} + autoMinValue + /> +
    + ) +} diff --git a/src/components/ui/overview/DashboardFilterbar.tsx b/src/components/ui/overview/DashboardFilterbar.tsx new file mode 100644 index 0000000..14bc7dc --- /dev/null +++ b/src/components/ui/overview/DashboardFilterbar.tsx @@ -0,0 +1,49 @@ +"use client" + +import { DateRangePicker } from "@/components/DatePicker" +import { subYears } from "date-fns" +import { DateRange } from "react-day-picker" + +export const getPeriod = ( + dateRange: DateRange | undefined, +): DateRange | undefined => { + if (!dateRange) return undefined + const from = dateRange.from + const to = dateRange.to + let lastYearFrom + let lastYearTo + if (from) { + lastYearFrom = subYears(from, 1) + } + if (to) { + lastYearTo = subYears(to, 1) + } + return { from: lastYearFrom, to: lastYearTo } +} + +type FilterbarProps = { + maxDate?: Date + minDate?: Date + selectedDates: DateRange | undefined + onDatesChange: (dates: DateRange | undefined) => void +} + +export function Filterbar({ + maxDate, + minDate, + selectedDates, + onDatesChange, +}: FilterbarProps) { + return ( +
    + +
    + ) +} diff --git a/src/components/ui/overview/DashboardProgressBarCard.tsx b/src/components/ui/overview/DashboardProgressBarCard.tsx new file mode 100644 index 0000000..ba831c8 --- /dev/null +++ b/src/components/ui/overview/DashboardProgressBarCard.tsx @@ -0,0 +1,77 @@ +import { Badge } from "@/components/Badge" +import { ProgressBar } from "@/components/ProgressBar" + +import { KpiEntry } from "@/app/(main)/overview/page" + +export type CardProps = { + title: string + change: string + value: string + valueDescription: string + ctaDescription: string + ctaText: string + ctaLink: string + data: KpiEntry[] +} + +export function ProgressBarCard({ + title, + change, + value, + valueDescription, + ctaDescription, + ctaText, + ctaLink, + data, +}: CardProps) { + return ( + <> +
    + + ) +} diff --git a/src/data/data.ts b/src/data/data.ts new file mode 100644 index 0000000..6f4a6b1 --- /dev/null +++ b/src/data/data.ts @@ -0,0 +1,577 @@ +import { Usage } from "./schema" + +export const roles: { value: string; label: string }[] = [ + { + value: "admin", + label: "Admin", + }, + { + value: "member", + label: "Member", + }, + { + value: "viewer", + label: "Viewer", + }, + { + value: "contributor", + label: "Contributor", + }, +] + +export const statuses: { value: string; label: string; variant: string }[] = [ + { + value: "live", + label: "Live", + variant: "success", + }, + { + value: "inactive", + label: "Inactive", + variant: "neutral", + }, + { + value: "archived", + label: "Archived", + variant: "warning", + }, +] + +export const regions: { value: string; label: string }[] = [ + { + value: "US-West 1", + label: "US-West 1", + }, + { + value: "US-West 2", + label: "US-West 2", + }, + { + value: "US-East 1", + label: "US-East 1", + }, + { + value: "US-East 2", + label: "US-East 2", + }, + { + value: "EU-West 1", + label: "EU-West 1", + }, + { + value: "EU-North 1", + label: "EU-North 1", + }, + { + value: "EU-Central 1", + label: "EU-Central 1", + }, +] + +export const conditions: { value: string; label: string }[] = [ + { + value: "is-equal-to", + label: "is equal to", + }, + { + value: "is-between", + label: "is between", + }, + { + value: "is-greater-than", + label: "is greater than", + }, + { + value: "is-less-than", + label: "is less than", + }, +] + +export const users: { + name: string + initials: string + email: string + role: string +}[] = [ + { + name: "Emma Stone", + initials: "ES", + email: "a.stone@gmail.com", + role: "viewer", + }, + { + name: "Alissia McCalister", + initials: "AM", + email: "a.stone@gmail.com", + role: "viewer", + }, + { + name: "Emily Luisa Bernacle", + initials: "EB", + email: "e.luis.bernacle@gmail.com", + role: "member", + }, + { + name: "Aaron Wave", + initials: "AW", + email: "a.flow@acme.com", + role: "contributor", + }, + { + name: "Thomas Palstein", + initials: "TP", + email: "t.palstein@acme.com", + role: "viewer", + }, + { + name: "Sarah Johnson", + initials: "SJ", + email: "s.johnson@gmail.com", + role: "admin", + }, + { + name: "Megan Katherina Brown", + initials: "MB", + email: "m.lovelybrown@gmail.com", + role: "contributor", + }, +] + +export const invitedUsers: { + initials: string + email: string + role: string + expires: number +}[] = [ + { + initials: "LP", + email: "lydia.posh@gmail.com", + role: "viewer", + expires: 12, + }, + { + initials: "AW", + email: "awidburg@bluewin.ch", + role: "viewer", + expires: 8, + }, +] + +export const usage: Usage[] = [ + { + owner: "John Doe", + status: "live", + costs: 5422.35, + region: "US-West 1", + stability: 99, + lastEdited: "23/09/2023 13:00", + }, + { + owner: "Jane Smith", + status: "live", + costs: 6087.11, + region: "US-East 2", + stability: 91, + lastEdited: "22/09/2023 10:45", + }, + { + owner: "Alejandro Garcia", + status: "live", + costs: 7234.56, + region: "EU-West 1", + stability: 12, + lastEdited: "17/05/2021 08:32", + }, + { + owner: "Wei Zhang", + status: "inactive", + costs: 0, + region: "US-West 2", + stability: 0, + lastEdited: "10/11/2022 15:24", + }, + { + owner: "Maria Rossi", + status: "live", + costs: 8190.77, + region: "US-East 1", + stability: 8, + lastEdited: "05/06/2023 12:16", + }, + { + owner: "Nina Müller", + status: "archived", + costs: 7609.32, + region: "EU-North 1", + stability: 20, + lastEdited: "23/01/2022 11:11", + }, + { + owner: "Liam O'Sullivan", + status: "live", + costs: 5204.98, + region: "US-West 1", + stability: 18, + lastEdited: "14/03/2023 14:45", + }, + { + owner: "Amir Fleischlin", + status: "inactive", + costs: 0, + region: "EU-Central 1", + stability: 0, + lastEdited: "12/02/2023 09:12", + }, + { + owner: "Yuki Tanaka", + status: "live", + costs: 9874.56, + region: "US-East 1", + stability: 6, + lastEdited: "19/08/2022 16:03", + }, + { + owner: "Fatima Al-Farsi", + status: "live", + costs: 5486.99, + region: "EU-West 1", + stability: 12, + lastEdited: "29/11/2021 17:25", + }, + { + owner: "Olga Ivanova", + status: "live", + costs: 6120.45, + region: "US-West 2", + stability: 9, + lastEdited: "07/12/2023 07:14", + }, + { + owner: "Pierre Dubois", + status: "live", + costs: 4834.11, + region: "EU-Central 1", + stability: 15, + lastEdited: "28/04/2023 10:45", + }, + { + owner: "Sara Johansson", + status: "live", + costs: 5302.22, + region: "US-East 2", + stability: 97, + lastEdited: "03/10/2022 08:33", + }, + { + owner: "Ahmed Hassan", + status: "live", + costs: 6221.54, + region: "US-West 1", + stability: 11, + lastEdited: "22/07/2022 14:16", + }, + { + owner: "Emily Brown", + status: "archived", + costs: 6129.99, + region: "EU-North 1", + stability: 22, + lastEdited: "18/01/2022 12:45", + }, + { + owner: "Carlos Sanchez", + status: "live", + costs: 4850.33, + region: "US-East 1", + stability: 13, + lastEdited: "05/06/2021 18:33", + }, + { + owner: "Hannah Kim", + status: "live", + costs: 7902.11, + region: "EU-West 1", + stability: 91, + lastEdited: "11/05/2023 11:00", + }, + { + owner: "David Johnson", + status: "live", + costs: 6789.77, + region: "US-West 2", + stability: 10, + lastEdited: "19/09/2023 17:17", + }, + { + owner: "Linda Anderson", + status: "live", + costs: 7434.22, + region: "US-East 2", + stability: 9, + lastEdited: "27/03/2023 14:28", + }, + { + owner: "Michael Lee", + status: "archived", + costs: 7290.01, + region: "EU-Central 1", + stability: 12, + lastEdited: "23/11/2022 15:13", + }, + { + owner: "Sophia Lopez", + status: "live", + costs: 8921.34, + region: "EU-North 1", + stability: 16, + lastEdited: "08/05/2023 08:56", + }, + { + owner: "Robert White", + status: "live", + costs: 6834.23, + region: "US-West 1", + stability: 8, + lastEdited: "29/04/2022 19:27", + }, + { + owner: "Mia Wang", + status: "inactive", + costs: 0, + region: "US-West 2", + stability: 14, + lastEdited: "30/12/2023 13:01", + }, + { + owner: "James Taylor", + status: "live", + costs: 4321.56, + region: "EU-West 1", + stability: 5, + lastEdited: "18/06/2021 10:49", + }, + { + owner: "Victoria Martinez", + status: "archived", + costs: 5120.33, + region: "US-East 1", + stability: 19, + lastEdited: "24/02/2022 14:02", + }, + { + owner: "William Harris", + status: "live", + costs: 9211.42, + region: "EU-North 1", + stability: 11, + lastEdited: "22/07/2021 12:33", + }, + { + owner: "Isabella Clark", + status: "inactive", + costs: 0, + region: "US-East 2", + stability: 6, + lastEdited: "13/09/2022 16:22", + }, + { + owner: "Alexander Young", + status: "live", + costs: 4534.88, + region: "US-West 1", + stability: 17, + lastEdited: "09/10/2023 17:44", + }, + { + owner: "Grace Patel", + status: "live", + costs: 8245.99, + region: "EU-Central 1", + stability: 9, + lastEdited: "29/07/2022 11:56", + }, + { + owner: "Daniel Wilson", + status: "archived", + costs: 7890.77, + region: "EU-West 1", + stability: 14, + lastEdited: "10/11/2021 15:08", + }, + { + owner: "Charlotte Thompson", + status: "live", + costs: 8911.44, + region: "US-East 1", + stability: 10, + lastEdited: "06/08/2021 09:17", + }, + { + owner: "Olivia Anderson", + status: "inactive", + costs: 0, + region: "EU-West 1", + stability: 12, + lastEdited: "25/05/2022 10:05", + }, + { + owner: "Henry Brown", + status: "live", + costs: 5500.12, + region: "US-West 2", + stability: 15, + lastEdited: "07/01/2023 08:33", + }, + { + owner: "Ethan Davis", + status: "live", + costs: 7200.98, + region: "EU-Central 1", + stability: 8, + lastEdited: "21/09/2023 13:00", + }, + { + owner: "Amelia Wilson", + status: "live", + costs: 8321.56, + region: "US-East 2", + stability: 18, + lastEdited: "12/06/2021 11:45", + }, + { + owner: "Lucas Martin", + status: "live", + costs: 4534.99, + region: "US-West 1", + stability: 11, + lastEdited: "30/03/2022 14:14", + }, + { + owner: "Mason Clark", + status: "live", + costs: 6890.11, + region: "EU-North 1", + stability: 7, + lastEdited: "14/05/2023 12:36", + }, + { + owner: "Emma Robinson", + status: "live", + costs: 7990.01, + region: "US-East 1", + stability: 13, + lastEdited: "18/10/2022 09:25", + }, + { + owner: "Benjamin Lewis", + status: "archived", + costs: 5412.23, + region: "EU-Central 1", + stability: 20, + lastEdited: "22/02/2022 15:55", + }, + { + owner: "Ava Walker", + status: "live", + costs: 7123.98, + region: "US-West 2", + stability: 9, + lastEdited: "27/08/2023 18:33", + }, + { + owner: "Elijah Young", + status: "live", + costs: 6445.33, + region: "EU-West 1", + stability: 8, + lastEdited: "02/07/2021 17:14", + }, + { + owner: "Sophia Hall", + status: "inactive", + costs: 0, + region: "US-East 1", + stability: 10, + lastEdited: "15/04/2023 10:45", + }, + { + owner: "Matthew Harris", + status: "live", + costs: 7634.67, + region: "EU-North 1", + stability: 11, + lastEdited: "06/09/2023 11:23", + }, + { + owner: "Aiden Thompson", + status: "archived", + costs: 4900.88, + region: "US-West 1", + stability: 14, + lastEdited: "20/10/2021 16:05", + }, + { + owner: "Chloe Martinez", + status: "live", + costs: 5234.44, + region: "US-East 2", + stability: 17, + lastEdited: "11/11/2023 08:55", + }, + { + owner: "Oliver Davis", + status: "inactive", + costs: 0, + region: "EU-West 1", + stability: 12, + lastEdited: "18/08/2022 14:34", + }, + { + owner: "Emily Clark", + status: "live", + costs: 7688.55, + region: "EU-Central 1", + stability: 9, + lastEdited: "22/04/2023 12:11", + }, + { + owner: "Jack Lewis", + status: "archived", + costs: 6344.89, + region: "US-West 2", + stability: 19, + lastEdited: "10/02/2021 11:45", + }, + { + owner: "Lily Walker", + status: "live", + costs: 5003.78, + region: "EU-West 1", + stability: 8, + lastEdited: "23/07/2022 14:33", + }, + { + owner: "Jackson Martinez", + status: "inactive", + costs: 0, + region: "US-East 1", + stability: 7, + lastEdited: "07/05/2023 09:27", + }, + { + owner: "Avery Hall", + status: "live", + costs: 8432.45, + region: "EU-Central 1", + stability: 11, + lastEdited: "16/03/2022 15:44", + }, + { + owner: "Logan Harris", + status: "archived", + costs: 7120.39, + region: "EU-North 1", + stability: 21, + lastEdited: "01/01/2022 16:18", + }, +] diff --git a/src/data/generateData.js b/src/data/generateData.js new file mode 100644 index 0000000..2ed60de --- /dev/null +++ b/src/data/generateData.js @@ -0,0 +1,140 @@ +const fs = require("fs") +const path = require("path") + +function generateRandomData( + previousValue, + min, + max, + variance, + isWeekend, + weekendReduction, + momentum, +) { + let drift = (Math.random() - 0.5) * 2 * variance + drift += momentum // Apply momentum + + let randomValue = previousValue * (1 + drift) + + // Ensure the value stays within the specified min and max bounds with stronger correction + if (randomValue < min) { + randomValue = min + (min - randomValue) * 0.2 // Apply stronger correction if below min + } else if (randomValue > max) { + randomValue = max - (randomValue - max) * 0.2 // Apply stronger correction if above max + } + + if (isWeekend && weekendReduction) { + const reductionFactor = 1 - (Math.random() * 0.15 + 0.1) // Reduce by 10-25% + randomValue *= reductionFactor + } + + // Calculate new momentum based on the current drift + momentum = drift * 0.5 // Adjust momentum scaling factor as needed + + return { + value: Math.round(randomValue), + momentum, + } +} + +function generateData(startDate, endDate, categories) { + const overviews = [] + let currentDate = new Date(startDate) + const endDateObj = new Date(endDate) + + // Initialize previous values with average values for each category + const previousValues = {} + const momenta = {} // Track momentum for each category + categories.forEach((category) => { + previousValues[category.name] = (category.min + category.max) / 2 // Initialize with mid-point value + momenta[category.name] = 0 // Initialize momentum + }) + + while (currentDate <= endDateObj) { + const isWeekend = currentDate.getDay() === 0 || currentDate.getDay() === 6 // 0 = Sunday, 6 = Saturday + const dataEntry = { + date: currentDate.toISOString().split("T")[0] + "T00:00:00", + } + + categories.forEach((category) => { + const result = generateRandomData( + previousValues[category.name], + category.min, + category.max, + category.variance, + isWeekend, + category.weekendReduction, + momenta[category.name], + ) + dataEntry[category.name] = result.value + previousValues[category.name] = result.value + momenta[category.name] = result.momentum + }) + + overviews.push(dataEntry) + currentDate.setDate(currentDate.getDate() + 1) + } + + return overviews +} + +const categories = [ + { + name: "Rows written", + min: 2500, + max: 3700, + variance: 0.01, + weekendReduction: false, + }, + { + name: "Rows read", + min: 18000, + max: 28000, + variance: 0.03, + weekendReduction: false, + }, + { + name: "Queries", + min: 478, + max: 612, + variance: 0.01, + weekendReduction: true, + }, + { + name: "Payments completed", + min: 80, + max: 125, + variance: 0.5, + weekendReduction: true, + }, + { + name: "Sign ups", + min: 60, + max: 80, + variance: 0.5, + weekendReduction: true, + }, + { + name: "Logins", + min: 844, + max: 2048, + variance: 0.2, + weekendReduction: false, + }, +] + +const startDate = "2023-01-01" +const endDate = "2024-05-17" + +const overviews = generateData(startDate, endDate, categories) + +const dataString = `import { OverviewData } from "./schema"; + +export const overviews: OverviewData[] = ${JSON.stringify(overviews, null, 2)}; +` + +const outputPath = path.join(__dirname, "overview-data.ts") + +fs.writeFile(outputPath, dataString, (err) => { + if (err) throw err + console.log(`Data has been written to ${outputPath}`) +}) diff --git a/src/data/overview-data.ts b/src/data/overview-data.ts new file mode 100644 index 0000000..5df1993 --- /dev/null +++ b/src/data/overview-data.ts @@ -0,0 +1,4531 @@ +import { OverviewData } from "./schema" + +export const overviews: OverviewData[] = [ + { + date: "2023-01-01T00:00:00", + "Rows written": 3093, + "Rows read": 22633, + Queries: 448, + "Payments completed": 71, + "Sign ups": 60, + Logins: 1664, + }, + { + date: "2023-01-02T00:00:00", + "Rows written": 3061, + "Rows read": 22587, + Queries: 484, + "Payments completed": 88, + "Sign ups": 79, + Logins: 1642, + }, + { + date: "2023-01-03T00:00:00", + "Rows written": 3062, + "Rows read": 22079, + Queries: 487, + "Payments completed": 100, + "Sign ups": 75, + Logins: 1525, + }, + { + date: "2023-01-04T00:00:00", + "Rows written": 3076, + "Rows read": 21412, + Queries: 487, + "Payments completed": 122, + "Sign ups": 61, + Logins: 1211, + }, + { + date: "2023-01-05T00:00:00", + "Rows written": 3066, + "Rows read": 20679, + Queries: 484, + "Payments completed": 107, + "Sign ups": 64, + Logins: 991, + }, + { + date: "2023-01-06T00:00:00", + "Rows written": 3043, + "Rows read": 20048, + Queries: 479, + "Payments completed": 124, + "Sign ups": 64, + Logins: 855, + }, + { + date: "2023-01-07T00:00:00", + "Rows written": 3026, + "Rows read": 19335, + Queries: 369, + "Payments completed": 105, + "Sign ups": 55, + Logins: 875, + }, + { + date: "2023-01-08T00:00:00", + "Rows written": 3031, + "Rows read": 19548, + Queries: 420, + "Payments completed": 68, + "Sign ups": 47, + Logins: 867, + }, + { + date: "2023-01-09T00:00:00", + "Rows written": 3030, + "Rows read": 19431, + Queries: 489, + "Payments completed": 87, + "Sign ups": 66, + Logins: 853, + }, + { + date: "2023-01-10T00:00:00", + "Rows written": 3024, + "Rows read": 18802, + Queries: 493, + "Payments completed": 90, + "Sign ups": 76, + Logins: 976, + }, + { + date: "2023-01-11T00:00:00", + "Rows written": 3028, + "Rows read": 18816, + Queries: 499, + "Payments completed": 89, + "Sign ups": 72, + Logins: 1191, + }, + { + date: "2023-01-12T00:00:00", + "Rows written": 3049, + "Rows read": 19225, + Queries: 500, + "Payments completed": 91, + "Sign ups": 76, + Logins: 1235, + }, + { + date: "2023-01-13T00:00:00", + "Rows written": 3066, + "Rows read": 19467, + Queries: 505, + "Payments completed": 123, + "Sign ups": 64, + Logins: 1060, + }, + { + date: "2023-01-14T00:00:00", + "Rows written": 3049, + "Rows read": 19950, + Queries: 418, + "Payments completed": 87, + "Sign ups": 61, + Logins: 915, + }, + { + date: "2023-01-15T00:00:00", + "Rows written": 3018, + "Rows read": 19814, + Queries: 422, + "Payments completed": 103, + "Sign ups": 46, + Logins: 1026, + }, + { + date: "2023-01-16T00:00:00", + "Rows written": 2976, + "Rows read": 19962, + Queries: 490, + "Payments completed": 118, + "Sign ups": 62, + Logins: 1199, + }, + { + date: "2023-01-17T00:00:00", + "Rows written": 2939, + "Rows read": 19931, + Queries: 484, + "Payments completed": 96, + "Sign ups": 61, + Logins: 1344, + }, + { + date: "2023-01-18T00:00:00", + "Rows written": 2931, + "Rows read": 19650, + Queries: 480, + "Payments completed": 124, + "Sign ups": 64, + Logins: 1203, + }, + { + date: "2023-01-19T00:00:00", + "Rows written": 2935, + "Rows read": 19592, + Queries: 479, + "Payments completed": 112, + "Sign ups": 67, + Logins: 1351, + }, + { + date: "2023-01-20T00:00:00", + "Rows written": 2962, + "Rows read": 19214, + Queries: 478, + "Payments completed": 121, + "Sign ups": 80, + Logins: 1379, + }, + { + date: "2023-01-21T00:00:00", + "Rows written": 2965, + "Rows read": 19460, + Queries: 385, + "Payments completed": 88, + "Sign ups": 60, + Logins: 1460, + }, + { + date: "2023-01-22T00:00:00", + "Rows written": 2969, + "Rows read": 19151, + Queries: 373, + "Payments completed": 77, + "Sign ups": 70, + Logins: 1704, + }, + { + date: "2023-01-23T00:00:00", + "Rows written": 2945, + "Rows read": 19301, + Queries: 499, + "Payments completed": 85, + "Sign ups": 62, + Logins: 1951, + }, + { + date: "2023-01-24T00:00:00", + "Rows written": 2933, + "Rows read": 19614, + Queries: 501, + "Payments completed": 80, + "Sign ups": 61, + Logins: 1768, + }, + { + date: "2023-01-25T00:00:00", + "Rows written": 2910, + "Rows read": 19470, + Queries: 497, + "Payments completed": 100, + "Sign ups": 66, + Logins: 1811, + }, + { + date: "2023-01-26T00:00:00", + "Rows written": 2904, + "Rows read": 19632, + Queries: 492, + "Payments completed": 82, + "Sign ups": 68, + Logins: 2048, + }, + { + date: "2023-01-27T00:00:00", + "Rows written": 2905, + "Rows read": 19706, + Queries: 488, + "Payments completed": 87, + "Sign ups": 60, + Logins: 1853, + }, + { + date: "2023-01-28T00:00:00", + "Rows written": 2881, + "Rows read": 20284, + Queries: 422, + "Payments completed": 77, + "Sign ups": 63, + Logins: 1693, + }, + { + date: "2023-01-29T00:00:00", + "Rows written": 2851, + "Rows read": 20142, + Queries: 418, + "Payments completed": 74, + "Sign ups": 54, + Logins: 1637, + }, + { + date: "2023-01-30T00:00:00", + "Rows written": 2859, + "Rows read": 19518, + Queries: 490, + "Payments completed": 89, + "Sign ups": 79, + Logins: 1847, + }, + { + date: "2023-01-31T00:00:00", + "Rows written": 2855, + "Rows read": 19639, + Queries: 491, + "Payments completed": 94, + "Sign ups": 67, + Logins: 1972, + }, + { + date: "2023-02-01T00:00:00", + "Rows written": 2839, + "Rows read": 19806, + Queries: 494, + "Payments completed": 82, + "Sign ups": 60, + Logins: 1818, + }, + { + date: "2023-02-02T00:00:00", + "Rows written": 2840, + "Rows read": 19498, + Queries: 494, + "Payments completed": 86, + "Sign ups": 60, + Logins: 1437, + }, + { + date: "2023-02-03T00:00:00", + "Rows written": 2861, + "Rows read": 18849, + Queries: 489, + "Payments completed": 81, + "Sign ups": 65, + Logins: 1420, + }, + { + date: "2023-02-04T00:00:00", + "Rows written": 2892, + "Rows read": 19077, + Queries: 379, + "Payments completed": 66, + "Sign ups": 56, + Logins: 1622, + }, + { + date: "2023-02-05T00:00:00", + "Rows written": 2892, + "Rows read": 19313, + Queries: 398, + "Payments completed": 69, + "Sign ups": 52, + Logins: 1847, + }, + { + date: "2023-02-06T00:00:00", + "Rows written": 2870, + "Rows read": 18922, + Queries: 494, + "Payments completed": 89, + "Sign ups": 61, + Logins: 2020, + }, + { + date: "2023-02-07T00:00:00", + "Rows written": 2849, + "Rows read": 18994, + Queries: 491, + "Payments completed": 80, + "Sign ups": 65, + Logins: 2035, + }, + { + date: "2023-02-08T00:00:00", + "Rows written": 2826, + "Rows read": 18675, + Queries: 493, + "Payments completed": 85, + "Sign ups": 61, + Logins: 2044, + }, + { + date: "2023-02-09T00:00:00", + "Rows written": 2810, + "Rows read": 18103, + Queries: 493, + "Payments completed": 90, + "Sign ups": 61, + Logins: 1899, + }, + { + date: "2023-02-10T00:00:00", + "Rows written": 2779, + "Rows read": 18138, + Queries: 498, + "Payments completed": 87, + "Sign ups": 62, + Logins: 1478, + }, + { + date: "2023-02-11T00:00:00", + "Rows written": 2739, + "Rows read": 18141, + Queries: 414, + "Payments completed": 71, + "Sign ups": 63, + Logins: 1158, + }, + { + date: "2023-02-12T00:00:00", + "Rows written": 2717, + "Rows read": 18061, + Queries: 431, + "Payments completed": 68, + "Sign ups": 60, + Logins: 850, + }, + { + date: "2023-02-13T00:00:00", + "Rows written": 2698, + "Rows read": 18111, + Queries: 487, + "Payments completed": 81, + "Sign ups": 70, + Logins: 871, + }, + { + date: "2023-02-14T00:00:00", + "Rows written": 2685, + "Rows read": 18265, + Queries: 485, + "Payments completed": 106, + "Sign ups": 63, + Logins: 849, + }, + { + date: "2023-02-15T00:00:00", + "Rows written": 2676, + "Rows read": 18603, + Queries: 488, + "Payments completed": 86, + "Sign ups": 79, + Logins: 874, + }, + { + date: "2023-02-16T00:00:00", + "Rows written": 2681, + "Rows read": 18967, + Queries: 488, + "Payments completed": 81, + "Sign ups": 76, + Logins: 862, + }, + { + date: "2023-02-17T00:00:00", + "Rows written": 2699, + "Rows read": 19166, + Queries: 484, + "Payments completed": 85, + "Sign ups": 62, + Logins: 864, + }, + { + date: "2023-02-18T00:00:00", + "Rows written": 2710, + "Rows read": 18711, + Queries: 430, + "Payments completed": 66, + "Sign ups": 52, + Logins: 918, + }, + { + date: "2023-02-19T00:00:00", + "Rows written": 2694, + "Rows read": 18862, + Queries: 398, + "Payments completed": 69, + "Sign ups": 60, + Logins: 968, + }, + { + date: "2023-02-20T00:00:00", + "Rows written": 2679, + "Rows read": 18473, + Queries: 494, + "Payments completed": 80, + "Sign ups": 73, + Logins: 1142, + }, + { + date: "2023-02-21T00:00:00", + "Rows written": 2684, + "Rows read": 18663, + Queries: 497, + "Payments completed": 93, + "Sign ups": 61, + Logins: 1360, + }, + { + date: "2023-02-22T00:00:00", + "Rows written": 2678, + "Rows read": 18562, + Queries: 498, + "Payments completed": 83, + "Sign ups": 72, + Logins: 1691, + }, + { + date: "2023-02-23T00:00:00", + "Rows written": 2669, + "Rows read": 18132, + Queries: 499, + "Payments completed": 105, + "Sign ups": 62, + Logins: 1862, + }, + { + date: "2023-02-24T00:00:00", + "Rows written": 2674, + "Rows read": 18392, + Queries: 499, + "Payments completed": 117, + "Sign ups": 66, + Logins: 2003, + }, + { + date: "2023-02-25T00:00:00", + "Rows written": 2667, + "Rows read": 19037, + Queries: 386, + "Payments completed": 94, + "Sign ups": 67, + Logins: 2006, + }, + { + date: "2023-02-26T00:00:00", + "Rows written": 2689, + "Rows read": 19828, + Queries: 385, + "Payments completed": 105, + "Sign ups": 62, + Logins: 2007, + }, + { + date: "2023-02-27T00:00:00", + "Rows written": 2680, + "Rows read": 20667, + Queries: 497, + "Payments completed": 115, + "Sign ups": 62, + Logins: 1742, + }, + { + date: "2023-02-28T00:00:00", + "Rows written": 2686, + "Rows read": 20929, + Queries: 494, + "Payments completed": 84, + "Sign ups": 66, + Logins: 1910, + }, + { + date: "2023-03-01T00:00:00", + "Rows written": 2694, + "Rows read": 20639, + Queries: 495, + "Payments completed": 85, + "Sign ups": 63, + Logins: 1766, + }, + { + date: "2023-03-02T00:00:00", + "Rows written": 2687, + "Rows read": 19941, + Queries: 495, + "Payments completed": 82, + "Sign ups": 65, + Logins: 1674, + }, + { + date: "2023-03-03T00:00:00", + "Rows written": 2708, + "Rows read": 19420, + Queries: 491, + "Payments completed": 102, + "Sign ups": 66, + Logins: 1785, + }, + { + date: "2023-03-04T00:00:00", + "Rows written": 2741, + "Rows read": 18773, + Queries: 415, + "Payments completed": 78, + "Sign ups": 52, + Logins: 1732, + }, + { + date: "2023-03-05T00:00:00", + "Rows written": 2783, + "Rows read": 18993, + Queries: 402, + "Payments completed": 64, + "Sign ups": 47, + Logins: 1813, + }, + { + date: "2023-03-06T00:00:00", + "Rows written": 2819, + "Rows read": 18895, + Queries: 493, + "Payments completed": 80, + "Sign ups": 67, + Logins: 1938, + }, + { + date: "2023-03-07T00:00:00", + "Rows written": 2856, + "Rows read": 19163, + Queries: 488, + "Payments completed": 118, + "Sign ups": 75, + Logins: 1798, + }, + { + date: "2023-03-08T00:00:00", + "Rows written": 2870, + "Rows read": 19383, + Queries: 483, + "Payments completed": 123, + "Sign ups": 75, + Logins: 1866, + }, + { + date: "2023-03-09T00:00:00", + "Rows written": 2855, + "Rows read": 19523, + Queries: 483, + "Payments completed": 118, + "Sign ups": 61, + Logins: 1640, + }, + { + date: "2023-03-10T00:00:00", + "Rows written": 2819, + "Rows read": 19186, + Queries: 480, + "Payments completed": 124, + "Sign ups": 65, + Logins: 1274, + }, + { + date: "2023-03-11T00:00:00", + "Rows written": 2785, + "Rows read": 18841, + Queries: 415, + "Payments completed": 97, + "Sign ups": 52, + Logins: 895, + }, + { + date: "2023-03-12T00:00:00", + "Rows written": 2787, + "Rows read": 18357, + Queries: 390, + "Payments completed": 71, + "Sign ups": 50, + Logins: 861, + }, + { + date: "2023-03-13T00:00:00", + "Rows written": 2810, + "Rows read": 18455, + Queries: 496, + "Payments completed": 94, + "Sign ups": 67, + Logins: 853, + }, + { + date: "2023-03-14T00:00:00", + "Rows written": 2827, + "Rows read": 18791, + Queries: 494, + "Payments completed": 92, + "Sign ups": 77, + Logins: 860, + }, + { + date: "2023-03-15T00:00:00", + "Rows written": 2855, + "Rows read": 19023, + Queries: 493, + "Payments completed": 94, + "Sign ups": 80, + Logins: 922, + }, + { + date: "2023-03-16T00:00:00", + "Rows written": 2895, + "Rows read": 19666, + Queries: 495, + "Payments completed": 122, + "Sign ups": 76, + Logins: 1127, + }, + { + date: "2023-03-17T00:00:00", + "Rows written": 2912, + "Rows read": 20299, + Queries: 497, + "Payments completed": 114, + "Sign ups": 61, + Logins: 1055, + }, + { + date: "2023-03-18T00:00:00", + "Rows written": 2924, + "Rows read": 20036, + Queries: 386, + "Payments completed": 95, + "Sign ups": 60, + Logins: 1158, + }, + { + date: "2023-03-19T00:00:00", + "Rows written": 2953, + "Rows read": 20010, + Queries: 408, + "Payments completed": 71, + "Sign ups": 58, + Logins: 1438, + }, + { + date: "2023-03-20T00:00:00", + "Rows written": 2939, + "Rows read": 19601, + Queries: 492, + "Payments completed": 87, + "Sign ups": 70, + Logins: 1332, + }, + { + date: "2023-03-21T00:00:00", + "Rows written": 2932, + "Rows read": 19406, + Queries: 495, + "Payments completed": 120, + "Sign ups": 75, + Logins: 1102, + }, + { + date: "2023-03-22T00:00:00", + "Rows written": 2951, + "Rows read": 19742, + Queries: 497, + "Payments completed": 110, + "Sign ups": 75, + Logins: 951, + }, + { + date: "2023-03-23T00:00:00", + "Rows written": 2937, + "Rows read": 19329, + Queries: 503, + "Payments completed": 103, + "Sign ups": 75, + Logins: 846, + }, + { + date: "2023-03-24T00:00:00", + "Rows written": 2945, + "Rows read": 19646, + Queries: 511, + "Payments completed": 118, + "Sign ups": 71, + Logins: 850, + }, + { + date: "2023-03-25T00:00:00", + "Rows written": 2947, + "Rows read": 19271, + Queries: 426, + "Payments completed": 97, + "Sign ups": 67, + Logins: 878, + }, + { + date: "2023-03-26T00:00:00", + "Rows written": 2945, + "Rows read": 18842, + Queries: 382, + "Payments completed": 98, + "Sign ups": 67, + Logins: 851, + }, + { + date: "2023-03-26T00:00:00", + "Rows written": 2926, + "Rows read": 18999, + Queries: 498, + "Payments completed": 118, + "Sign ups": 73, + Logins: 872, + }, + { + date: "2023-03-27T00:00:00", + "Rows written": 2945, + "Rows read": 19312, + Queries: 499, + "Payments completed": 123, + "Sign ups": 62, + Logins: 863, + }, + { + date: "2023-03-28T00:00:00", + "Rows written": 2937, + "Rows read": 19258, + Queries: 502, + "Payments completed": 118, + "Sign ups": 80, + Logins: 901, + }, + { + date: "2023-03-29T00:00:00", + "Rows written": 2908, + "Rows read": 19567, + Queries: 501, + "Payments completed": 120, + "Sign ups": 74, + Logins: 845, + }, + { + date: "2023-03-30T00:00:00", + "Rows written": 2876, + "Rows read": 19888, + Queries: 497, + "Payments completed": 120, + "Sign ups": 61, + Logins: 869, + }, + { + date: "2023-03-31T00:00:00", + "Rows written": 2855, + "Rows read": 20292, + Queries: 438, + "Payments completed": 70, + "Sign ups": 53, + Logins: 865, + }, + { + date: "2023-04-01T00:00:00", + "Rows written": 2845, + "Rows read": 20739, + Queries: 403, + "Payments completed": 61, + "Sign ups": 60, + Logins: 860, + }, + { + date: "2023-04-02T00:00:00", + "Rows written": 2838, + "Rows read": 20633, + Queries: 493, + "Payments completed": 81, + "Sign ups": 66, + Logins: 867, + }, + { + date: "2023-04-03T00:00:00", + "Rows written": 2832, + "Rows read": 21003, + Queries: 496, + "Payments completed": 82, + "Sign ups": 60, + Logins: 867, + }, + { + date: "2023-04-04T00:00:00", + "Rows written": 2825, + "Rows read": 20648, + Queries: 500, + "Payments completed": 81, + "Sign ups": 66, + Logins: 963, + }, + { + date: "2023-04-05T00:00:00", + "Rows written": 2819, + "Rows read": 20691, + Queries: 504, + "Payments completed": 105, + "Sign ups": 64, + Logins: 1027, + }, + { + date: "2023-04-06T00:00:00", + "Rows written": 2823, + "Rows read": 20393, + Queries: 510, + "Payments completed": 121, + "Sign ups": 64, + Logins: 1171, + }, + { + date: "2023-04-07T00:00:00", + "Rows written": 2805, + "Rows read": 20582, + Queries: 412, + "Payments completed": 95, + "Sign ups": 54, + Logins: 1199, + }, + { + date: "2023-04-08T00:00:00", + "Rows written": 2805, + "Rows read": 20673, + Queries: 400, + "Payments completed": 75, + "Sign ups": 52, + Logins: 1208, + }, + { + date: "2023-04-09T00:00:00", + "Rows written": 2794, + "Rows read": 20134, + Queries: 494, + "Payments completed": 107, + "Sign ups": 64, + Logins: 1452, + }, + { + date: "2023-04-10T00:00:00", + "Rows written": 2802, + "Rows read": 19757, + Queries: 489, + "Payments completed": 121, + "Sign ups": 63, + Logins: 1464, + }, + { + date: "2023-04-11T00:00:00", + "Rows written": 2803, + "Rows read": 20053, + Queries: 486, + "Payments completed": 100, + "Sign ups": 60, + Logins: 1512, + }, + { + date: "2023-04-12T00:00:00", + "Rows written": 2812, + "Rows read": 19604, + Queries: 483, + "Payments completed": 120, + "Sign ups": 61, + Logins: 1360, + }, + { + date: "2023-04-13T00:00:00", + "Rows written": 2822, + "Rows read": 19715, + Queries: 478, + "Payments completed": 122, + "Sign ups": 69, + Logins: 1038, + }, + { + date: "2023-04-14T00:00:00", + "Rows written": 2819, + "Rows read": 20002, + Queries: 367, + "Payments completed": 82, + "Sign ups": 61, + Logins: 844, + }, + { + date: "2023-04-15T00:00:00", + "Rows written": 2805, + "Rows read": 20661, + Queries: 430, + "Payments completed": 70, + "Sign ups": 62, + Logins: 855, + }, + { + date: "2023-04-16T00:00:00", + "Rows written": 2826, + "Rows read": 21525, + Queries: 487, + "Payments completed": 81, + "Sign ups": 63, + Logins: 973, + }, + { + date: "2023-04-17T00:00:00", + "Rows written": 2812, + "Rows read": 21431, + Queries: 491, + "Payments completed": 90, + "Sign ups": 61, + Logins: 1065, + }, + { + date: "2023-04-18T00:00:00", + "Rows written": 2825, + "Rows read": 21171, + Queries: 493, + "Payments completed": 122, + "Sign ups": 64, + Logins: 1071, + }, + { + date: "2023-04-19T00:00:00", + "Rows written": 2841, + "Rows read": 20561, + Queries: 495, + "Payments completed": 123, + "Sign ups": 73, + Logins: 1065, + }, + { + date: "2023-04-20T00:00:00", + "Rows written": 2875, + "Rows read": 20802, + Queries: 494, + "Payments completed": 125, + "Sign ups": 63, + Logins: 1191, + }, + { + date: "2023-04-21T00:00:00", + "Rows written": 2873, + "Rows read": 20844, + Queries: 408, + "Payments completed": 92, + "Sign ups": 51, + Logins: 1415, + }, + { + date: "2023-04-22T00:00:00", + "Rows written": 2850, + "Rows read": 20898, + Queries: 372, + "Payments completed": 82, + "Sign ups": 57, + Logins: 1744, + }, + { + date: "2023-04-23T00:00:00", + "Rows written": 2833, + "Rows read": 20662, + Queries: 500, + "Payments completed": 91, + "Sign ups": 62, + Logins: 2017, + }, + { + date: "2023-04-24T00:00:00", + "Rows written": 2820, + "Rows read": 20361, + Queries: 494, + "Payments completed": 124, + "Sign ups": 79, + Logins: 1911, + }, + { + date: "2023-04-25T00:00:00", + "Rows written": 2820, + "Rows read": 19629, + Queries: 489, + "Payments completed": 113, + "Sign ups": 70, + Logins: 2014, + }, + { + date: "2023-04-26T00:00:00", + "Rows written": 2837, + "Rows read": 19197, + Queries: 486, + "Payments completed": 115, + "Sign ups": 63, + Logins: 2004, + }, + { + date: "2023-04-27T00:00:00", + "Rows written": 2852, + "Rows read": 19201, + Queries: 481, + "Payments completed": 113, + "Sign ups": 63, + Logins: 2029, + }, + { + date: "2023-04-28T00:00:00", + "Rows written": 2832, + "Rows read": 19708, + Queries: 405, + "Payments completed": 88, + "Sign ups": 50, + Logins: 2012, + }, + { + date: "2023-04-29T00:00:00", + "Rows written": 2808, + "Rows read": 20513, + Queries: 393, + "Payments completed": 94, + "Sign ups": 48, + Logins: 1745, + }, + { + date: "2023-04-30T00:00:00", + "Rows written": 2815, + "Rows read": 20545, + Queries: 495, + "Payments completed": 82, + "Sign ups": 64, + Logins: 1784, + }, + { + date: "2023-05-01T00:00:00", + "Rows written": 2804, + "Rows read": 20774, + Queries: 491, + "Payments completed": 84, + "Sign ups": 62, + Logins: 1883, + }, + { + date: "2023-05-02T00:00:00", + "Rows written": 2786, + "Rows read": 21453, + Queries: 489, + "Payments completed": 81, + "Sign ups": 62, + Logins: 1806, + }, + { + date: "2023-05-03T00:00:00", + "Rows written": 2786, + "Rows read": 21543, + Queries: 484, + "Payments completed": 106, + "Sign ups": 61, + Logins: 1967, + }, + { + date: "2023-05-04T00:00:00", + "Rows written": 2775, + "Rows read": 21089, + Queries: 484, + "Payments completed": 122, + "Sign ups": 62, + Logins: 1956, + }, + { + date: "2023-05-05T00:00:00", + "Rows written": 2784, + "Rows read": 20388, + Queries: 435, + "Payments completed": 90, + "Sign ups": 53, + Logins: 2032, + }, + { + date: "2023-05-06T00:00:00", + "Rows written": 2779, + "Rows read": 19678, + Queries: 386, + "Payments completed": 99, + "Sign ups": 47, + Logins: 1984, + }, + { + date: "2023-05-07T00:00:00", + "Rows written": 2763, + "Rows read": 19046, + Queries: 496, + "Payments completed": 115, + "Sign ups": 68, + Logins: 2021, + }, + { + date: "2023-05-08T00:00:00", + "Rows written": 2738, + "Rows read": 19152, + Queries: 500, + "Payments completed": 121, + "Sign ups": 80, + Logins: 1641, + }, + { + date: "2023-05-09T00:00:00", + "Rows written": 2738, + "Rows read": 18656, + Queries: 506, + "Payments completed": 81, + "Sign ups": 75, + Logins: 1286, + }, + { + date: "2023-05-10T00:00:00", + "Rows written": 2715, + "Rows read": 18455, + Queries: 507, + "Payments completed": 87, + "Sign ups": 79, + Logins: 987, + }, + { + date: "2023-05-11T00:00:00", + "Rows written": 2714, + "Rows read": 18037, + Queries: 505, + "Payments completed": 87, + "Sign ups": 79, + Logins: 953, + }, + { + date: "2023-05-12T00:00:00", + "Rows written": 2714, + "Rows read": 18119, + Queries: 422, + "Payments completed": 105, + "Sign ups": 55, + Logins: 1059, + }, + { + date: "2023-05-13T00:00:00", + "Rows written": 2717, + "Rows read": 18102, + Queries: 436, + "Payments completed": 94, + "Sign ups": 52, + Logins: 1153, + }, + { + date: "2023-05-14T00:00:00", + "Rows written": 2735, + "Rows read": 18080, + Queries: 487, + "Payments completed": 122, + "Sign ups": 61, + Logins: 1033, + }, + { + date: "2023-05-15T00:00:00", + "Rows written": 2756, + "Rows read": 18124, + Queries: 484, + "Payments completed": 99, + "Sign ups": 65, + Logins: 846, + }, + { + date: "2023-05-16T00:00:00", + "Rows written": 2757, + "Rows read": 18008, + Queries: 478, + "Payments completed": 125, + "Sign ups": 65, + Logins: 891, + }, + { + date: "2023-05-17T00:00:00", + "Rows written": 2752, + "Rows read": 18076, + Queries: 478, + "Payments completed": 113, + "Sign ups": 63, + Logins: 923, + }, + { + date: "2023-05-18T00:00:00", + "Rows written": 2772, + "Rows read": 18027, + Queries: 479, + "Payments completed": 84, + "Sign ups": 61, + Logins: 1115, + }, + { + date: "2023-05-19T00:00:00", + "Rows written": 2796, + "Rows read": 18099, + Queries: 387, + "Payments completed": 78, + "Sign ups": 52, + Logins: 1374, + }, + { + date: "2023-05-20T00:00:00", + "Rows written": 2793, + "Rows read": 18002, + Queries: 431, + "Payments completed": 84, + "Sign ups": 54, + Logins: 1622, + }, + { + date: "2023-05-21T00:00:00", + "Rows written": 2782, + "Rows read": 18012, + Queries: 488, + "Payments completed": 81, + "Sign ups": 74, + Logins: 1612, + }, + { + date: "2023-05-22T00:00:00", + "Rows written": 2794, + "Rows read": 18004, + Queries: 485, + "Payments completed": 87, + "Sign ups": 74, + Logins: 1668, + }, + { + date: "2023-05-23T00:00:00", + "Rows written": 2824, + "Rows read": 18446, + Queries: 481, + "Payments completed": 103, + "Sign ups": 67, + Logins: 1579, + }, + { + date: "2023-05-24T00:00:00", + "Rows written": 2862, + "Rows read": 18357, + Queries: 479, + "Payments completed": 96, + "Sign ups": 72, + Logins: 1294, + }, + { + date: "2023-05-25T00:00:00", + "Rows written": 2910, + "Rows read": 18021, + Queries: 478, + "Payments completed": 83, + "Sign ups": 79, + Logins: 1214, + }, + { + date: "2023-05-26T00:00:00", + "Rows written": 2949, + "Rows read": 18094, + Queries: 379, + "Payments completed": 66, + "Sign ups": 62, + Logins: 1054, + }, + { + date: "2023-05-27T00:00:00", + "Rows written": 2983, + "Rows read": 18053, + Queries: 390, + "Payments completed": 68, + "Sign ups": 63, + Logins: 1034, + }, + { + date: "2023-05-28T00:00:00", + "Rows written": 2978, + "Rows read": 18022, + Queries: 496, + "Payments completed": 92, + "Sign ups": 61, + Logins: 845, + }, + { + date: "2023-05-29T00:00:00", + "Rows written": 2963, + "Rows read": 18416, + Queries: 494, + "Payments completed": 93, + "Sign ups": 80, + Logins: 881, + }, + { + date: "2023-05-30T00:00:00", + "Rows written": 2949, + "Rows read": 18270, + Queries: 496, + "Payments completed": 81, + "Sign ups": 71, + Logins: 925, + }, + { + date: "2023-05-31T00:00:00", + "Rows written": 2965, + "Rows read": 18034, + Queries: 500, + "Payments completed": 80, + "Sign ups": 70, + Logins: 879, + }, + { + date: "2023-06-01T00:00:00", + "Rows written": 2970, + "Rows read": 18061, + Queries: 506, + "Payments completed": 95, + "Sign ups": 77, + Logins: 924, + }, + { + date: "2023-06-02T00:00:00", + "Rows written": 2974, + "Rows read": 18180, + Queries: 425, + "Payments completed": 74, + "Sign ups": 54, + Logins: 853, + }, + { + date: "2023-06-03T00:00:00", + "Rows written": 3004, + "Rows read": 18022, + Queries: 384, + "Payments completed": 74, + "Sign ups": 48, + Logins: 877, + }, + { + date: "2023-06-04T00:00:00", + "Rows written": 3033, + "Rows read": 18091, + Queries: 497, + "Payments completed": 102, + "Sign ups": 66, + Logins: 896, + }, + { + date: "2023-06-05T00:00:00", + "Rows written": 3033, + "Rows read": 18398, + Queries: 500, + "Payments completed": 101, + "Sign ups": 76, + Logins: 1053, + }, + { + date: "2023-06-06T00:00:00", + "Rows written": 3028, + "Rows read": 18439, + Queries: 505, + "Payments completed": 83, + "Sign ups": 74, + Logins: 1009, + }, + { + date: "2023-06-07T00:00:00", + "Rows written": 3008, + "Rows read": 18750, + Queries: 505, + "Payments completed": 82, + "Sign ups": 72, + Logins: 884, + }, + { + date: "2023-06-08T00:00:00", + "Rows written": 3000, + "Rows read": 19398, + Queries: 509, + "Payments completed": 80, + "Sign ups": 78, + Logins: 1003, + }, + { + date: "2023-06-09T00:00:00", + "Rows written": 2975, + "Rows read": 19233, + Queries: 442, + "Payments completed": 68, + "Sign ups": 54, + Logins: 1182, + }, + { + date: "2023-06-10T00:00:00", + "Rows written": 2958, + "Rows read": 19593, + Queries: 430, + "Payments completed": 65, + "Sign ups": 63, + Logins: 1129, + }, + { + date: "2023-06-11T00:00:00", + "Rows written": 2966, + "Rows read": 20333, + Queries: 488, + "Payments completed": 84, + "Sign ups": 61, + Logins: 1009, + }, + { + date: "2023-06-12T00:00:00", + "Rows written": 2988, + "Rows read": 20156, + Queries: 491, + "Payments completed": 98, + "Sign ups": 64, + Logins: 924, + }, + { + date: "2023-06-13T00:00:00", + "Rows written": 2973, + "Rows read": 19662, + Queries: 488, + "Payments completed": 106, + "Sign ups": 67, + Logins: 870, + }, + { + date: "2023-06-14T00:00:00", + "Rows written": 2951, + "Rows read": 19450, + Queries: 483, + "Payments completed": 122, + "Sign ups": 60, + Logins: 877, + }, + { + date: "2023-06-15T00:00:00", + "Rows written": 2917, + "Rows read": 19681, + Queries: 478, + "Payments completed": 97, + "Sign ups": 66, + Logins: 853, + }, + { + date: "2023-06-16T00:00:00", + "Rows written": 2877, + "Rows read": 19636, + Queries: 365, + "Payments completed": 71, + "Sign ups": 55, + Logins: 965, + }, + { + date: "2023-06-17T00:00:00", + "Rows written": 2850, + "Rows read": 19478, + Queries: 438, + "Payments completed": 65, + "Sign ups": 55, + Logins: 1101, + }, + { + date: "2023-06-18T00:00:00", + "Rows written": 2858, + "Rows read": 19258, + Queries: 487, + "Payments completed": 81, + "Sign ups": 64, + Logins: 1335, + }, + { + date: "2023-06-19T00:00:00", + "Rows written": 2880, + "Rows read": 19348, + Queries: 487, + "Payments completed": 118, + "Sign ups": 73, + Logins: 1406, + }, + { + date: "2023-06-20T00:00:00", + "Rows written": 2863, + "Rows read": 19951, + Queries: 488, + "Payments completed": 116, + "Sign ups": 76, + Logins: 1378, + }, + { + date: "2023-06-21T00:00:00", + "Rows written": 2844, + "Rows read": 20053, + Queries: 490, + "Payments completed": 82, + "Sign ups": 77, + Logins: 1294, + }, + { + date: "2023-06-22T00:00:00", + "Rows written": 2830, + "Rows read": 20493, + Queries: 489, + "Payments completed": 83, + "Sign ups": 61, + Logins: 1318, + }, + { + date: "2023-06-23T00:00:00", + "Rows written": 2833, + "Rows read": 20724, + Queries: 432, + "Payments completed": 66, + "Sign ups": 57, + Logins: 1076, + }, + { + date: "2023-06-24T00:00:00", + "Rows written": 2809, + "Rows read": 20767, + Queries: 431, + "Payments completed": 63, + "Sign ups": 59, + Logins: 852, + }, + { + date: "2023-06-25T00:00:00", + "Rows written": 2781, + "Rows read": 20818, + Queries: 487, + "Payments completed": 81, + "Sign ups": 64, + Logins: 881, + }, + { + date: "2023-06-26T00:00:00", + "Rows written": 2748, + "Rows read": 20673, + Queries: 490, + "Payments completed": 95, + "Sign ups": 78, + Logins: 914, + }, + { + date: "2023-06-27T00:00:00", + "Rows written": 2750, + "Rows read": 19990, + Queries: 492, + "Payments completed": 81, + "Sign ups": 74, + Logins: 855, + }, + { + date: "2023-06-28T00:00:00", + "Rows written": 2761, + "Rows read": 19874, + Queries: 488, + "Payments completed": 83, + "Sign ups": 69, + Logins: 876, + }, + { + date: "2023-06-29T00:00:00", + "Rows written": 2787, + "Rows read": 19812, + Queries: 486, + "Payments completed": 83, + "Sign ups": 76, + Logins: 900, + }, + { + date: "2023-06-30T00:00:00", + "Rows written": 2819, + "Rows read": 19619, + Queries: 376, + "Payments completed": 88, + "Sign ups": 66, + Logins: 852, + }, + { + date: "2023-07-01T00:00:00", + "Rows written": 2825, + "Rows read": 19145, + Queries: 374, + "Payments completed": 103, + "Sign ups": 52, + Logins: 856, + }, + { + date: "2023-07-02T00:00:00", + "Rows written": 2825, + "Rows read": 18490, + Queries: 499, + "Payments completed": 120, + "Sign ups": 64, + Logins: 878, + }, + { + date: "2023-07-03T00:00:00", + "Rows written": 2835, + "Rows read": 18059, + Queries: 503, + "Payments completed": 122, + "Sign ups": 63, + Logins: 936, + }, + { + date: "2023-07-04T00:00:00", + "Rows written": 2827, + "Rows read": 18157, + Queries: 507, + "Payments completed": 81, + "Sign ups": 78, + Logins: 1006, + }, + { + date: "2023-07-05T00:00:00", + "Rows written": 2842, + "Rows read": 18079, + Queries: 513, + "Payments completed": 81, + "Sign ups": 80, + Logins: 1049, + }, + { + date: "2023-07-06T00:00:00", + "Rows written": 2834, + "Rows read": 18317, + Queries: 515, + "Payments completed": 86, + "Sign ups": 62, + Logins: 1092, + }, + { + date: "2023-07-07T00:00:00", + "Rows written": 2839, + "Rows read": 18617, + Queries: 415, + "Payments completed": 72, + "Sign ups": 56, + Logins: 1210, + }, + { + date: "2023-07-08T00:00:00", + "Rows written": 2853, + "Rows read": 19089, + Queries: 430, + "Payments completed": 69, + "Sign ups": 54, + Logins: 1292, + }, + { + date: "2023-07-09T00:00:00", + "Rows written": 2850, + "Rows read": 19081, + Queries: 488, + "Payments completed": 89, + "Sign ups": 63, + Logins: 1354, + }, + { + date: "2023-07-10T00:00:00", + "Rows written": 2848, + "Rows read": 19119, + Queries: 482, + "Payments completed": 91, + "Sign ups": 78, + Logins: 1513, + }, + { + date: "2023-07-11T00:00:00", + "Rows written": 2835, + "Rows read": 19192, + Queries: 484, + "Payments completed": 87, + "Sign ups": 75, + Logins: 1546, + }, + { + date: "2023-07-12T00:00:00", + "Rows written": 2833, + "Rows read": 19322, + Queries: 484, + "Payments completed": 85, + "Sign ups": 78, + Logins: 1819, + }, + { + date: "2023-07-13T00:00:00", + "Rows written": 2806, + "Rows read": 19743, + Queries: 484, + "Payments completed": 111, + "Sign ups": 74, + Logins: 1954, + }, + { + date: "2023-07-14T00:00:00", + "Rows written": 2817, + "Rows read": 19688, + Queries: 426, + "Payments completed": 88, + "Sign ups": 59, + Logins: 1701, + }, + { + date: "2023-07-15T00:00:00", + "Rows written": 2795, + "Rows read": 19641, + Queries: 367, + "Payments completed": 101, + "Sign ups": 55, + Logins: 1309, + }, + { + date: "2023-07-16T00:00:00", + "Rows written": 2793, + "Rows read": 19952, + Queries: 500, + "Payments completed": 82, + "Sign ups": 63, + Logins: 1329, + }, + { + date: "2023-07-17T00:00:00", + "Rows written": 2809, + "Rows read": 20002, + Queries: 501, + "Payments completed": 82, + "Sign ups": 63, + Logins: 1447, + }, + { + date: "2023-07-18T00:00:00", + "Rows written": 2798, + "Rows read": 20051, + Queries: 497, + "Payments completed": 88, + "Sign ups": 74, + Logins: 1759, + }, + { + date: "2023-07-19T00:00:00", + "Rows written": 2767, + "Rows read": 19686, + Queries: 499, + "Payments completed": 90, + "Sign ups": 77, + Logins: 1931, + }, + { + date: "2023-07-20T00:00:00", + "Rows written": 2733, + "Rows read": 19300, + Queries: 498, + "Payments completed": 84, + "Sign ups": 72, + Logins: 2044, + }, + { + date: "2023-07-21T00:00:00", + "Rows written": 2704, + "Rows read": 18593, + Queries: 440, + "Payments completed": 66, + "Sign ups": 67, + Logins: 2014, + }, + { + date: "2023-07-22T00:00:00", + "Rows written": 2711, + "Rows read": 18352, + Queries: 408, + "Payments completed": 71, + "Sign ups": 72, + Logins: 1729, + }, + { + date: "2023-07-23T00:00:00", + "Rows written": 2719, + "Rows read": 18451, + Queries: 491, + "Payments completed": 85, + "Sign ups": 60, + Logins: 1423, + }, + { + date: "2023-07-24T00:00:00", + "Rows written": 2708, + "Rows read": 18006, + Queries: 490, + "Payments completed": 109, + "Sign ups": 66, + Logins: 1490, + }, + { + date: "2023-07-25T00:00:00", + "Rows written": 2709, + "Rows read": 18090, + Queries: 486, + "Payments completed": 99, + "Sign ups": 62, + Logins: 1458, + }, + { + date: "2023-07-26T00:00:00", + "Rows written": 2693, + "Rows read": 18102, + Queries: 480, + "Payments completed": 87, + "Sign ups": 61, + Logins: 1156, + }, + { + date: "2023-07-27T00:00:00", + "Rows written": 2680, + "Rows read": 18083, + Queries: 480, + "Payments completed": 96, + "Sign ups": 80, + Logins: 1031, + }, + { + date: "2023-07-28T00:00:00", + "Rows written": 2663, + "Rows read": 18029, + Queries: 370, + "Payments completed": 93, + "Sign ups": 60, + Logins: 966, + }, + { + date: "2023-07-29T00:00:00", + "Rows written": 2630, + "Rows read": 18005, + Queries: 383, + "Payments completed": 99, + "Sign ups": 57, + Logins: 896, + }, + { + date: "2023-07-30T00:00:00", + "Rows written": 2606, + "Rows read": 18020, + Queries: 496, + "Payments completed": 124, + "Sign ups": 66, + Logins: 1026, + }, + { + date: "2023-07-31T00:00:00", + "Rows written": 2575, + "Rows read": 18242, + Queries: 501, + "Payments completed": 124, + "Sign ups": 60, + Logins: 961, + }, + { + date: "2023-08-01T00:00:00", + "Rows written": 2573, + "Rows read": 18143, + Queries: 501, + "Payments completed": 89, + "Sign ups": 60, + Logins: 850, + }, + { + date: "2023-08-02T00:00:00", + "Rows written": 2592, + "Rows read": 18373, + Queries: 505, + "Payments completed": 114, + "Sign ups": 61, + Logins: 868, + }, + { + date: "2023-08-03T00:00:00", + "Rows written": 2592, + "Rows read": 19002, + Queries: 506, + "Payments completed": 123, + "Sign ups": 77, + Logins: 939, + }, + { + date: "2023-08-04T00:00:00", + "Rows written": 2593, + "Rows read": 19427, + Queries: 393, + "Payments completed": 79, + "Sign ups": 48, + Logins: 852, + }, + { + date: "2023-08-05T00:00:00", + "Rows written": 2584, + "Rows read": 19210, + Queries: 416, + "Payments completed": 78, + "Sign ups": 52, + Logins: 867, + }, + { + date: "2023-08-06T00:00:00", + "Rows written": 2575, + "Rows read": 18862, + Queries: 491, + "Payments completed": 100, + "Sign ups": 65, + Logins: 845, + }, + { + date: "2023-08-07T00:00:00", + "Rows written": 2583, + "Rows read": 18581, + Queries: 485, + "Payments completed": 122, + "Sign ups": 78, + Logins: 899, + }, + { + date: "2023-08-08T00:00:00", + "Rows written": 2589, + "Rows read": 18022, + Queries: 481, + "Payments completed": 117, + "Sign ups": 72, + Logins: 941, + }, + { + date: "2023-08-09T00:00:00", + "Rows written": 2582, + "Rows read": 18144, + Queries: 480, + "Payments completed": 86, + "Sign ups": 73, + Logins: 1132, + }, + { + date: "2023-08-10T00:00:00", + "Rows written": 2558, + "Rows read": 18725, + Queries: 478, + "Payments completed": 83, + "Sign ups": 80, + Logins: 1101, + }, + { + date: "2023-08-11T00:00:00", + "Rows written": 2522, + "Rows read": 18465, + Queries: 370, + "Payments completed": 66, + "Sign ups": 68, + Logins: 993, + }, + { + date: "2023-08-12T00:00:00", + "Rows written": 2504, + "Rows read": 18008, + Queries: 444, + "Payments completed": 67, + "Sign ups": 70, + Logins: 858, + }, + { + date: "2023-08-13T00:00:00", + "Rows written": 2507, + "Rows read": 18027, + Queries: 486, + "Payments completed": 88, + "Sign ups": 78, + Logins: 885, + }, + { + date: "2023-08-14T00:00:00", + "Rows written": 2506, + "Rows read": 18071, + Queries: 482, + "Payments completed": 107, + "Sign ups": 77, + Logins: 912, + }, + { + date: "2023-08-15T00:00:00", + "Rows written": 2503, + "Rows read": 18024, + Queries: 482, + "Payments completed": 80, + "Sign ups": 76, + Logins: 845, + }, + { + date: "2023-08-16T00:00:00", + "Rows written": 2502, + "Rows read": 18038, + Queries: 480, + "Payments completed": 89, + "Sign ups": 79, + Logins: 846, + }, + { + date: "2023-08-17T00:00:00", + "Rows written": 2503, + "Rows read": 18118, + Queries: 478, + "Payments completed": 83, + "Sign ups": 72, + Logins: 867, + }, + { + date: "2023-08-18T00:00:00", + "Rows written": 2509, + "Rows read": 18050, + Queries: 405, + "Payments completed": 82, + "Sign ups": 58, + Logins: 984, + }, + { + date: "2023-08-19T00:00:00", + "Rows written": 2500, + "Rows read": 18011, + Queries: 383, + "Payments completed": 97, + "Sign ups": 59, + Logins: 1006, + }, + { + date: "2023-08-20T00:00:00", + "Rows written": 2505, + "Rows read": 18215, + Queries: 497, + "Payments completed": 96, + "Sign ups": 78, + Logins: 975, + }, + { + date: "2023-08-21T00:00:00", + "Rows written": 2512, + "Rows read": 18186, + Queries: 499, + "Payments completed": 80, + "Sign ups": 68, + Logins: 976, + }, + { + date: "2023-08-22T00:00:00", + "Rows written": 2501, + "Rows read": 18401, + Queries: 501, + "Payments completed": 80, + "Sign ups": 74, + Logins: 1084, + }, + { + date: "2023-08-23T00:00:00", + "Rows written": 2501, + "Rows read": 18519, + Queries: 499, + "Payments completed": 96, + "Sign ups": 76, + Logins: 1130, + }, + { + date: "2023-08-24T00:00:00", + "Rows written": 2508, + "Rows read": 18913, + Queries: 501, + "Payments completed": 104, + "Sign ups": 75, + Logins: 944, + }, + { + date: "2023-08-25T00:00:00", + "Rows written": 2502, + "Rows read": 19306, + Queries: 426, + "Payments completed": 84, + "Sign ups": 66, + Logins: 872, + }, + { + date: "2023-08-26T00:00:00", + "Rows written": 2506, + "Rows read": 19592, + Queries: 436, + "Payments completed": 85, + "Sign ups": 54, + Logins: 858, + }, + { + date: "2023-08-27T00:00:00", + "Rows written": 2501, + "Rows read": 19482, + Queries: 486, + "Payments completed": 111, + "Sign ups": 61, + Logins: 861, + }, + { + date: "2023-08-28T00:00:00", + "Rows written": 2505, + "Rows read": 19193, + Queries: 483, + "Payments completed": 82, + "Sign ups": 77, + Logins: 922, + }, + { + date: "2023-08-29T00:00:00", + "Rows written": 2505, + "Rows read": 19224, + Queries: 482, + "Payments completed": 112, + "Sign ups": 64, + Logins: 935, + }, + { + date: "2023-08-30T00:00:00", + "Rows written": 2515, + "Rows read": 18795, + Queries: 482, + "Payments completed": 123, + "Sign ups": 62, + Logins: 845, + }, + { + date: "2023-08-31T00:00:00", + "Rows written": 2515, + "Rows read": 18658, + Queries: 479, + "Payments completed": 112, + "Sign ups": 64, + Logins: 932, + }, + { + date: "2023-09-01T00:00:00", + "Rows written": 2500, + "Rows read": 18864, + Queries: 408, + "Payments completed": 78, + "Sign ups": 60, + Logins: 958, + }, + { + date: "2023-09-02T00:00:00", + "Rows written": 2506, + "Rows read": 19030, + Queries: 416, + "Payments completed": 71, + "Sign ups": 49, + Logins: 943, + }, + { + date: "2023-09-03T00:00:00", + "Rows written": 2507, + "Rows read": 18759, + Queries: 491, + "Payments completed": 87, + "Sign ups": 61, + Logins: 863, + }, + { + date: "2023-09-04T00:00:00", + "Rows written": 2508, + "Rows read": 19168, + Queries: 492, + "Payments completed": 88, + "Sign ups": 79, + Logins: 846, + }, + { + date: "2023-09-05T00:00:00", + "Rows written": 2514, + "Rows read": 19384, + Queries: 496, + "Payments completed": 84, + "Sign ups": 71, + Logins: 880, + }, + { + date: "2023-09-06T00:00:00", + "Rows written": 2541, + "Rows read": 18965, + Queries: 496, + "Payments completed": 81, + "Sign ups": 62, + Logins: 852, + }, + { + date: "2023-09-07T00:00:00", + "Rows written": 2531, + "Rows read": 18810, + Queries: 498, + "Payments completed": 80, + "Sign ups": 67, + Logins: 856, + }, + { + date: "2023-09-08T00:00:00", + "Rows written": 2505, + "Rows read": 18734, + Queries: 378, + "Payments completed": 67, + "Sign ups": 50, + Logins: 931, + }, + { + date: "2023-09-09T00:00:00", + "Rows written": 2502, + "Rows read": 18705, + Queries: 445, + "Payments completed": 83, + "Sign ups": 52, + Logins: 989, + }, + { + date: "2023-09-10T00:00:00", + "Rows written": 2513, + "Rows read": 19192, + Queries: 484, + "Payments completed": 83, + "Sign ups": 61, + Logins: 1148, + }, + { + date: "2023-09-11T00:00:00", + "Rows written": 2540, + "Rows read": 19588, + Queries: 484, + "Payments completed": 92, + "Sign ups": 79, + Logins: 1198, + }, + { + date: "2023-09-12T00:00:00", + "Rows written": 2570, + "Rows read": 20135, + Queries: 487, + "Payments completed": 82, + "Sign ups": 80, + Logins: 1104, + }, + { + date: "2023-09-13T00:00:00", + "Rows written": 2571, + "Rows read": 20847, + Queries: 490, + "Payments completed": 88, + "Sign ups": 77, + Logins: 1082, + }, + { + date: "2023-09-14T00:00:00", + "Rows written": 2549, + "Rows read": 21778, + Queries: 494, + "Payments completed": 85, + "Sign ups": 79, + Logins: 1119, + }, + { + date: "2023-09-15T00:00:00", + "Rows written": 2535, + "Rows read": 21650, + Queries: 412, + "Payments completed": 64, + "Sign ups": 54, + Logins: 1074, + }, + { + date: "2023-09-16T00:00:00", + "Rows written": 2544, + "Rows read": 20967, + Queries: 431, + "Payments completed": 73, + "Sign ups": 56, + Logins: 1132, + }, + { + date: "2023-09-17T00:00:00", + "Rows written": 2547, + "Rows read": 20966, + Queries: 489, + "Payments completed": 115, + "Sign ups": 67, + Logins: 1260, + }, + { + date: "2023-09-18T00:00:00", + "Rows written": 2539, + "Rows read": 21347, + Queries: 487, + "Payments completed": 115, + "Sign ups": 76, + Logins: 1292, + }, + { + date: "2023-09-19T00:00:00", + "Rows written": 2524, + "Rows read": 22148, + Queries: 489, + "Payments completed": 115, + "Sign ups": 66, + Logins: 1128, + }, + { + date: "2023-09-20T00:00:00", + "Rows written": 2519, + "Rows read": 21947, + Queries: 488, + "Payments completed": 118, + "Sign ups": 68, + Logins: 1196, + }, + { + date: "2023-09-21T00:00:00", + "Rows written": 2529, + "Rows read": 22192, + Queries: 487, + "Payments completed": 85, + "Sign ups": 65, + Logins: 1268, + }, + { + date: "2023-09-22T00:00:00", + "Rows written": 2510, + "Rows read": 22218, + Queries: 397, + "Payments completed": 73, + "Sign ups": 54, + Logins: 1184, + }, + { + date: "2023-09-23T00:00:00", + "Rows written": 2522, + "Rows read": 22302, + Queries: 374, + "Payments completed": 70, + "Sign ups": 55, + Logins: 931, + }, + { + date: "2023-09-24T00:00:00", + "Rows written": 2547, + "Rows read": 22352, + Queries: 498, + "Payments completed": 103, + "Sign ups": 80, + Logins: 950, + }, + { + date: "2023-09-25T00:00:00", + "Rows written": 2538, + "Rows read": 22820, + Queries: 500, + "Payments completed": 124, + "Sign ups": 69, + Logins: 1131, + }, + { + date: "2023-09-26T00:00:00", + "Rows written": 2514, + "Rows read": 22707, + Queries: 499, + "Payments completed": 112, + "Sign ups": 67, + Logins: 1013, + }, + { + date: "2023-09-27T00:00:00", + "Rows written": 2503, + "Rows read": 22818, + Queries: 495, + "Payments completed": 118, + "Sign ups": 74, + Logins: 1053, + }, + { + date: "2023-09-28T00:00:00", + "Rows written": 2505, + "Rows read": 22403, + Queries: 497, + "Payments completed": 118, + "Sign ups": 78, + Logins: 1065, + }, + { + date: "2023-09-29T00:00:00", + "Rows written": 2501, + "Rows read": 22182, + Queries: 435, + "Payments completed": 71, + "Sign ups": 61, + Logins: 916, + }, + { + date: "2023-09-30T00:00:00", + "Rows written": 2504, + "Rows read": 22135, + Queries: 418, + "Payments completed": 76, + "Sign ups": 48, + Logins: 845, + }, + { + date: "2023-10-01T00:00:00", + "Rows written": 2504, + "Rows read": 21827, + Queries: 490, + "Payments completed": 90, + "Sign ups": 64, + Logins: 891, + }, + { + date: "2023-10-02T00:00:00", + "Rows written": 2511, + "Rows read": 21733, + Queries: 489, + "Payments completed": 86, + "Sign ups": 62, + Logins: 889, + }, + { + date: "2023-10-03T00:00:00", + "Rows written": 2533, + "Rows read": 21655, + Queries: 487, + "Payments completed": 81, + "Sign ups": 61, + Logins: 1002, + }, + { + date: "2023-10-04T00:00:00", + "Rows written": 2551, + "Rows read": 22072, + Queries: 490, + "Payments completed": 103, + "Sign ups": 64, + Logins: 887, + }, + { + date: "2023-10-05T00:00:00", + "Rows written": 2568, + "Rows read": 22724, + Queries: 489, + "Payments completed": 83, + "Sign ups": 63, + Logins: 863, + }, + { + date: "2023-10-06T00:00:00", + "Rows written": 2588, + "Rows read": 23121, + Queries: 378, + "Payments completed": 92, + "Sign ups": 49, + Logins: 849, + }, + { + date: "2023-10-07T00:00:00", + "Rows written": 2609, + "Rows read": 23546, + Queries: 447, + "Payments completed": 68, + "Sign ups": 54, + Logins: 924, + }, + { + date: "2023-10-08T00:00:00", + "Rows written": 2619, + "Rows read": 23939, + Queries: 485, + "Payments completed": 81, + "Sign ups": 61, + Logins: 1026, + }, + { + date: "2023-10-09T00:00:00", + "Rows written": 2613, + "Rows read": 24842, + Queries: 487, + "Payments completed": 121, + "Sign ups": 64, + Logins: 1006, + }, + { + date: "2023-10-10T00:00:00", + "Rows written": 2626, + "Rows read": 25404, + Queries: 490, + "Payments completed": 98, + "Sign ups": 66, + Logins: 1027, + }, + { + date: "2023-10-11T00:00:00", + "Rows written": 2639, + "Rows read": 25232, + Queries: 488, + "Payments completed": 117, + "Sign ups": 66, + Logins: 983, + }, + { + date: "2023-10-12T00:00:00", + "Rows written": 2643, + "Rows read": 24786, + Queries: 489, + "Payments completed": 99, + "Sign ups": 79, + Logins: 848, + }, + { + date: "2023-10-13T00:00:00", + "Rows written": 2666, + "Rows read": 24905, + Queries: 381, + "Payments completed": 67, + "Sign ups": 59, + Logins: 857, + }, + { + date: "2023-10-14T00:00:00", + "Rows written": 2703, + "Rows read": 24710, + Queries: 430, + "Payments completed": 67, + "Sign ups": 57, + Logins: 928, + }, + { + date: "2023-10-15T00:00:00", + "Rows written": 2729, + "Rows read": 25132, + Queries: 488, + "Payments completed": 99, + "Sign ups": 64, + Logins: 845, + }, + { + date: "2023-10-16T00:00:00", + "Rows written": 2737, + "Rows read": 24724, + Queries: 487, + "Payments completed": 119, + "Sign ups": 64, + Logins: 879, + }, + { + date: "2023-10-17T00:00:00", + "Rows written": 2730, + "Rows read": 25172, + Queries: 486, + "Payments completed": 119, + "Sign ups": 64, + Logins: 862, + }, + { + date: "2023-10-18T00:00:00", + "Rows written": 2737, + "Rows read": 25762, + Queries: 485, + "Payments completed": 121, + "Sign ups": 62, + Logins: 895, + }, + { + date: "2023-10-19T00:00:00", + "Rows written": 2738, + "Rows read": 25469, + Queries: 487, + "Payments completed": 97, + "Sign ups": 64, + Logins: 998, + }, + { + date: "2023-10-20T00:00:00", + "Rows written": 2724, + "Rows read": 25948, + Queries: 409, + "Payments completed": 70, + "Sign ups": 67, + Logins: 940, + }, + { + date: "2023-10-21T00:00:00", + "Rows written": 2722, + "Rows read": 26662, + Queries: 401, + "Payments completed": 69, + "Sign ups": 61, + Logins: 971, + }, + { + date: "2023-10-22T00:00:00", + "Rows written": 2737, + "Rows read": 27288, + Queries: 493, + "Payments completed": 98, + "Sign ups": 69, + Logins: 924, + }, + { + date: "2023-10-23T00:00:00", + "Rows written": 2737, + "Rows read": 26813, + Queries: 493, + "Payments completed": 119, + "Sign ups": 63, + Logins: 844, + }, + { + date: "2023-10-24T00:00:00", + "Rows written": 2755, + "Rows read": 27228, + Queries: 493, + "Payments completed": 113, + "Sign ups": 78, + Logins: 879, + }, + { + date: "2023-10-25T00:00:00", + "Rows written": 2742, + "Rows read": 26723, + Queries: 494, + "Payments completed": 102, + "Sign ups": 75, + Logins: 871, + }, + { + date: "2023-10-26T00:00:00", + "Rows written": 2715, + "Rows read": 26364, + Queries: 494, + "Payments completed": 121, + "Sign ups": 75, + Logins: 961, + }, + { + date: "2023-10-27T00:00:00", + "Rows written": 2692, + "Rows read": 26686, + Queries: 442, + "Payments completed": 94, + "Sign ups": 63, + Logins: 848, + }, + { + date: "2023-10-28T00:00:00", + "Rows written": 2690, + "Rows read": 26161, + Queries: 389, + "Payments completed": 108, + "Sign ups": 48, + Logins: 857, + }, + { + date: "2023-10-30T00:00:00", + "Rows written": 2710, + "Rows read": 25456, + Queries: 496, + "Payments completed": 94, + "Sign ups": 62, + Logins: 874, + }, + { + date: "2023-10-31T00:00:00", + "Rows written": 2728, + "Rows read": 24798, + Queries: 493, + "Payments completed": 85, + "Sign ups": 68, + Logins: 933, + }, + { + date: "2023-11-01T00:00:00", + "Rows written": 2756, + "Rows read": 25010, + Queries: 496, + "Payments completed": 90, + "Sign ups": 71, + Logins: 845, + }, + { + date: "2023-11-02T00:00:00", + "Rows written": 2744, + "Rows read": 25796, + Queries: 493, + "Payments completed": 81, + "Sign ups": 64, + Logins: 861, + }, + { + date: "2023-11-03T00:00:00", + "Rows written": 2730, + "Rows read": 25748, + Queries: 490, + "Payments completed": 85, + "Sign ups": 77, + Logins: 984, + }, + { + date: "2023-11-04T00:00:00", + "Rows written": 2745, + "Rows read": 26054, + Queries: 412, + "Payments completed": 81, + "Sign ups": 64, + Logins: 955, + }, + { + date: "2023-11-05T00:00:00", + "Rows written": 2760, + "Rows read": 25986, + Queries: 436, + "Payments completed": 96, + "Sign ups": 58, + Logins: 920, + }, + { + date: "2023-11-06T00:00:00", + "Rows written": 2769, + "Rows read": 25393, + Queries: 486, + "Payments completed": 95, + "Sign ups": 64, + Logins: 855, + }, + { + date: "2023-11-07T00:00:00", + "Rows written": 2748, + "Rows read": 24541, + Queries: 491, + "Payments completed": 84, + "Sign ups": 75, + Logins: 861, + }, + { + date: "2023-11-08T00:00:00", + "Rows written": 2751, + "Rows read": 24743, + Queries: 496, + "Payments completed": 93, + "Sign ups": 70, + Logins: 953, + }, + { + date: "2023-11-09T00:00:00", + "Rows written": 2754, + "Rows read": 24904, + Queries: 503, + "Payments completed": 121, + "Sign ups": 63, + Logins: 861, + }, + { + date: "2023-11-10T00:00:00", + "Rows written": 2778, + "Rows read": 24773, + Queries: 504, + "Payments completed": 122, + "Sign ups": 64, + Logins: 872, + }, + { + date: "2023-11-11T00:00:00", + "Rows written": 2816, + "Rows read": 23992, + Queries: 381, + "Payments completed": 93, + "Sign ups": 59, + Logins: 936, + }, + { + date: "2023-11-12T00:00:00", + "Rows written": 2823, + "Rows read": 23135, + Queries: 401, + "Payments completed": 65, + "Sign ups": 54, + Logins: 987, + }, + { + date: "2023-11-13T00:00:00", + "Rows written": 2843, + "Rows read": 22986, + Queries: 494, + "Payments completed": 84, + "Sign ups": 60, + Logins: 959, + }, + { + date: "2023-11-14T00:00:00", + "Rows written": 2865, + "Rows read": 22974, + Queries: 492, + "Payments completed": 81, + "Sign ups": 69, + Logins: 998, + }, + { + date: "2023-11-15T00:00:00", + "Rows written": 2871, + "Rows read": 23523, + Queries: 490, + "Payments completed": 85, + "Sign ups": 79, + Logins: 871, + }, + { + date: "2023-11-16T00:00:00", + "Rows written": 2848, + "Rows read": 23927, + Queries: 485, + "Payments completed": 91, + "Sign ups": 76, + Logins: 854, + }, + { + date: "2023-11-17T00:00:00", + "Rows written": 2843, + "Rows read": 23635, + Queries: 484, + "Payments completed": 86, + "Sign ups": 77, + Logins: 883, + }, + { + date: "2023-11-18T00:00:00", + "Rows written": 2857, + "Rows read": 23801, + Queries: 423, + "Payments completed": 73, + "Sign ups": 61, + Logins: 844, + }, + { + date: "2023-11-19T00:00:00", + "Rows written": 2890, + "Rows read": 23932, + Queries: 410, + "Payments completed": 70, + "Sign ups": 51, + Logins: 881, + }, + { + date: "2023-11-20T00:00:00", + "Rows written": 2928, + "Rows read": 24512, + Queries: 492, + "Payments completed": 91, + "Sign ups": 69, + Logins: 891, + }, + { + date: "2023-11-21T00:00:00", + "Rows written": 2929, + "Rows read": 24943, + Queries: 487, + "Payments completed": 85, + "Sign ups": 61, + Logins: 865, + }, + { + date: "2023-11-22T00:00:00", + "Rows written": 2927, + "Rows read": 25053, + Queries: 484, + "Payments completed": 108, + "Sign ups": 61, + Logins: 859, + }, + { + date: "2023-11-23T00:00:00", + "Rows written": 2936, + "Rows read": 25126, + Queries: 479, + "Payments completed": 116, + "Sign ups": 64, + Logins: 863, + }, + { + date: "2023-11-24T00:00:00", + "Rows written": 2939, + "Rows read": 24528, + Queries: 479, + "Payments completed": 93, + "Sign ups": 60, + Logins: 869, + }, + { + date: "2023-11-25T00:00:00", + "Rows written": 2917, + "Rows read": 24379, + Queries: 366, + "Payments completed": 64, + "Sign ups": 50, + Logins: 870, + }, + { + date: "2023-11-26T00:00:00", + "Rows written": 2923, + "Rows read": 24301, + Queries: 437, + "Payments completed": 64, + "Sign ups": 52, + Logins: 866, + }, + { + date: "2023-11-27T00:00:00", + "Rows written": 2907, + "Rows read": 24537, + Queries: 486, + "Payments completed": 81, + "Sign ups": 64, + Logins: 876, + }, + { + date: "2023-11-28T00:00:00", + "Rows written": 2919, + "Rows read": 25358, + Queries: 486, + "Payments completed": 124, + "Sign ups": 68, + Logins: 1032, + }, + { + date: "2023-11-29T00:00:00", + "Rows written": 2949, + "Rows read": 25428, + Queries: 482, + "Payments completed": 113, + "Sign ups": 64, + Logins: 1285, + }, + { + date: "2023-11-30T00:00:00", + "Rows written": 2957, + "Rows read": 25179, + Queries: 478, + "Payments completed": 121, + "Sign ups": 66, + Logins: 1697, + }, + { + date: "2023-12-01T00:00:00", + "Rows written": 2937, + "Rows read": 24846, + Queries: 478, + "Payments completed": 117, + "Sign ups": 63, + Logins: 2012, + }, + { + date: "2023-12-02T00:00:00", + "Rows written": 2949, + "Rows read": 24979, + Queries: 359, + "Payments completed": 106, + "Sign ups": 49, + Logins: 2006, + }, + { + date: "2023-12-03T00:00:00", + "Rows written": 2941, + "Rows read": 25038, + Queries: 442, + "Payments completed": 104, + "Sign ups": 45, + Logins: 1794, + }, + { + date: "2023-12-04T00:00:00", + "Rows written": 2951, + "Rows read": 24652, + Queries: 486, + "Payments completed": 116, + "Sign ups": 66, + Logins: 1765, + }, + { + date: "2023-12-05T00:00:00", + "Rows written": 2941, + "Rows read": 23863, + Queries: 487, + "Payments completed": 96, + "Sign ups": 68, + Logins: 1841, + }, + { + date: "2023-12-06T00:00:00", + "Rows written": 2941, + "Rows read": 23307, + Queries: 490, + "Payments completed": 82, + "Sign ups": 63, + Logins: 2022, + }, + { + date: "2023-12-07T00:00:00", + "Rows written": 2950, + "Rows read": 23317, + Queries: 489, + "Payments completed": 84, + "Sign ups": 76, + Logins: 1973, + }, + { + date: "2023-12-08T00:00:00", + "Rows written": 2943, + "Rows read": 23254, + Queries: 484, + "Payments completed": 82, + "Sign ups": 73, + Logins: 1786, + }, + { + date: "2023-12-09T00:00:00", + "Rows written": 2945, + "Rows read": 22527, + Queries: 428, + "Payments completed": 84, + "Sign ups": 55, + Logins: 1533, + }, + { + date: "2023-12-10T00:00:00", + "Rows written": 2960, + "Rows read": 22319, + Queries: 409, + "Payments completed": 106, + "Sign ups": 48, + Logins: 1279, + }, + { + date: "2023-12-11T00:00:00", + "Rows written": 2983, + "Rows read": 21870, + Queries: 491, + "Payments completed": 90, + "Sign ups": 64, + Logins: 1018, + }, + { + date: "2023-12-12T00:00:00", + "Rows written": 2991, + "Rows read": 21482, + Queries: 492, + "Payments completed": 80, + "Sign ups": 78, + Logins: 973, + }, + { + date: "2023-12-13T00:00:00", + "Rows written": 2991, + "Rows read": 21630, + Queries: 497, + "Payments completed": 84, + "Sign ups": 73, + Logins: 857, + }, + { + date: "2023-12-14T00:00:00", + "Rows written": 2970, + "Rows read": 21774, + Queries: 500, + "Payments completed": 96, + "Sign ups": 80, + Logins: 868, + }, + { + date: "2023-12-15T00:00:00", + "Rows written": 2981, + "Rows read": 21684, + Queries: 499, + "Payments completed": 121, + "Sign ups": 79, + Logins: 952, + }, + { + date: "2023-12-16T00:00:00", + "Rows written": 2989, + "Rows read": 22265, + Queries: 397, + "Payments completed": 90, + "Sign ups": 60, + Logins: 1118, + }, + { + date: "2023-12-17T00:00:00", + "Rows written": 2977, + "Rows read": 22417, + Queries: 426, + "Payments completed": 66, + "Sign ups": 48, + Logins: 1415, + }, + { + date: "2023-12-18T00:00:00", + "Rows written": 2960, + "Rows read": 22538, + Queries: 488, + "Payments completed": 83, + "Sign ups": 67, + Logins: 1881, + }, + { + date: "2023-12-19T00:00:00", + "Rows written": 2950, + "Rows read": 22247, + Queries: 486, + "Payments completed": 121, + "Sign ups": 60, + Logins: 1911, + }, + { + date: "2023-12-20T00:00:00", + "Rows written": 2919, + "Rows read": 22166, + Queries: 487, + "Payments completed": 125, + "Sign ups": 60, + Logins: 1637, + }, + { + date: "2023-12-21T00:00:00", + "Rows written": 2912, + "Rows read": 22083, + Queries: 483, + "Payments completed": 121, + "Sign ups": 62, + Logins: 1519, + }, + { + date: "2023-12-22T00:00:00", + "Rows written": 2933, + "Rows read": 21697, + Queries: 480, + "Payments completed": 119, + "Sign ups": 61, + Logins: 1315, + }, + { + date: "2023-12-23T00:00:00", + "Rows written": 2918, + "Rows read": 21487, + Queries: 391, + "Payments completed": 94, + "Sign ups": 52, + Logins: 1275, + }, + { + date: "2023-12-24T00:00:00", + "Rows written": 2891, + "Rows read": 20748, + Queries: 398, + "Payments completed": 68, + "Sign ups": 57, + Logins: 1138, + }, + { + date: "2023-12-25T00:00:00", + "Rows written": 2858, + "Rows read": 20147, + Queries: 495, + "Payments completed": 89, + "Sign ups": 65, + Logins: 1213, + }, + { + date: "2023-12-26T00:00:00", + "Rows written": 2858, + "Rows read": 20262, + Queries: 489, + "Payments completed": 98, + "Sign ups": 60, + Logins: 1306, + }, + { + date: "2023-12-27T00:00:00", + "Rows written": 2847, + "Rows read": 20921, + Queries: 483, + "Payments completed": 81, + "Sign ups": 65, + Logins: 1536, + }, + { + date: "2023-12-28T00:00:00", + "Rows written": 2845, + "Rows read": 20830, + Queries: 482, + "Payments completed": 87, + "Sign ups": 63, + Logins: 1879, + }, + { + date: "2023-12-29T00:00:00", + "Rows written": 2827, + "Rows read": 21133, + Queries: 482, + "Payments completed": 99, + "Sign ups": 60, + Logins: 2034, + }, + { + date: "2023-12-30T00:00:00", + "Rows written": 2826, + "Rows read": 21097, + Queries: 427, + "Payments completed": 94, + "Sign ups": 53, + Logins: 2009, + }, + { + date: "2023-12-31T00:00:00", + "Rows written": 2808, + "Rows read": 20776, + Queries: 399, + "Payments completed": 81, + "Sign ups": 49, + Logins: 2002, + }, + { + date: "2024-01-01T00:00:00", + "Rows written": 2790, + "Rows read": 20855, + Queries: 494, + "Payments completed": 87, + "Sign ups": 66, + Logins: 2038, + }, + { + date: "2024-01-02T00:00:00", + "Rows written": 2778, + "Rows read": 20444, + Queries: 490, + "Payments completed": 81, + "Sign ups": 65, + Logins: 1994, + }, + { + date: "2024-01-03T00:00:00", + "Rows written": 2788, + "Rows read": 19651, + Queries: 491, + "Payments completed": 86, + "Sign ups": 60, + Logins: 1975, + }, + { + date: "2024-01-04T00:00:00", + "Rows written": 2768, + "Rows read": 18747, + Queries: 494, + "Payments completed": 84, + "Sign ups": 65, + Logins: 2012, + }, + { + date: "2024-01-05T00:00:00", + "Rows written": 2782, + "Rows read": 18514, + Queries: 493, + "Payments completed": 98, + "Sign ups": 66, + Logins: 1944, + }, + { + date: "2024-01-06T00:00:00", + "Rows written": 2777, + "Rows read": 18686, + Queries: 379, + "Payments completed": 106, + "Sign ups": 55, + Logins: 1741, + }, + { + date: "2024-01-07T00:00:00", + "Rows written": 2785, + "Rows read": 18779, + Queries: 431, + "Payments completed": 92, + "Sign ups": 52, + Logins: 1862, + }, + { + date: "2024-01-08T00:00:00", + "Rows written": 2783, + "Rows read": 18994, + Queries: 488, + "Payments completed": 119, + "Sign ups": 65, + Logins: 2003, + }, + { + date: "2024-01-09T00:00:00", + "Rows written": 2769, + "Rows read": 18892, + Queries: 486, + "Payments completed": 112, + "Sign ups": 68, + Logins: 1975, + }, + { + date: "2024-01-10T00:00:00", + "Rows written": 2739, + "Rows read": 18785, + Queries: 485, + "Payments completed": 121, + "Sign ups": 63, + Logins: 2021, + }, + { + date: "2024-01-11T00:00:00", + "Rows written": 2708, + "Rows read": 18323, + Queries: 489, + "Payments completed": 112, + "Sign ups": 64, + Logins: 2020, + }, + { + date: "2024-01-12T00:00:00", + "Rows written": 2697, + "Rows read": 18607, + Queries: 489, + "Payments completed": 102, + "Sign ups": 63, + Logins: 1934, + }, + { + date: "2024-01-13T00:00:00", + "Rows written": 2709, + "Rows read": 18881, + Queries: 371, + "Payments completed": 106, + "Sign ups": 52, + Logins: 1908, + }, + { + date: "2024-01-14T00:00:00", + "Rows written": 2734, + "Rows read": 18941, + Queries: 393, + "Payments completed": 82, + "Sign ups": 50, + Logins: 1572, + }, + { + date: "2024-01-15T00:00:00", + "Rows written": 2735, + "Rows read": 19199, + Queries: 495, + "Payments completed": 106, + "Sign ups": 68, + Logins: 1311, + }, + { + date: "2024-01-16T00:00:00", + "Rows written": 2735, + "Rows read": 19883, + Queries: 493, + "Payments completed": 82, + "Sign ups": 61, + Logins: 946, + }, + { + date: "2024-01-17T00:00:00", + "Rows written": 2720, + "Rows read": 20709, + Queries: 495, + "Payments completed": 86, + "Sign ups": 61, + Logins: 878, + }, + { + date: "2024-01-18T00:00:00", + "Rows written": 2700, + "Rows read": 20770, + Queries: 500, + "Payments completed": 82, + "Sign ups": 66, + Logins: 895, + }, + { + date: "2024-01-19T00:00:00", + "Rows written": 2670, + "Rows read": 20735, + Queries: 501, + "Payments completed": 88, + "Sign ups": 64, + Logins: 882, + }, + { + date: "2024-01-20T00:00:00", + "Rows written": 2672, + "Rows read": 20107, + Queries: 425, + "Payments completed": 67, + "Sign ups": 54, + Logins: 852, + }, + { + date: "2024-01-21T00:00:00", + "Rows written": 2676, + "Rows read": 19418, + Queries: 380, + "Payments completed": 70, + "Sign ups": 47, + Logins: 854, + }, + { + date: "2024-01-22T00:00:00", + "Rows written": 2692, + "Rows read": 19118, + Queries: 498, + "Payments completed": 82, + "Sign ups": 62, + Logins: 848, + }, + { + date: "2024-01-23T00:00:00", + "Rows written": 2691, + "Rows read": 18577, + Queries: 495, + "Payments completed": 88, + "Sign ups": 78, + Logins: 872, + }, + { + date: "2024-01-24T00:00:00", + "Rows written": 2703, + "Rows read": 18052, + Queries: 493, + "Payments completed": 109, + "Sign ups": 69, + Logins: 875, + }, + { + date: "2024-01-25T00:00:00", + "Rows written": 2735, + "Rows read": 18108, + Queries: 491, + "Payments completed": 80, + "Sign ups": 76, + Logins: 914, + }, + { + date: "2024-01-26T00:00:00", + "Rows written": 2733, + "Rows read": 18137, + Queries: 488, + "Payments completed": 80, + "Sign ups": 78, + Logins: 959, + }, + { + date: "2024-01-27T00:00:00", + "Rows written": 2724, + "Rows read": 18116, + Queries: 432, + "Payments completed": 65, + "Sign ups": 53, + Logins: 1059, + }, + { + date: "2024-01-28T00:00:00", + "Rows written": 2727, + "Rows read": 18575, + Queries: 431, + "Payments completed": 65, + "Sign ups": 49, + Logins: 997, + }, + { + date: "2024-01-29T00:00:00", + "Rows written": 2755, + "Rows read": 19197, + Queries: 488, + "Payments completed": 83, + "Sign ups": 64, + Logins: 950, + }, + { + date: "2024-01-30T00:00:00", + "Rows written": 2756, + "Rows read": 19751, + Queries: 490, + "Payments completed": 87, + "Sign ups": 66, + Logins: 1028, + }, + { + date: "2024-01-31T00:00:00", + "Rows written": 2783, + "Rows read": 19767, + Queries: 491, + "Payments completed": 102, + "Sign ups": 79, + Logins: 1198, + }, + { + date: "2024-02-01T00:00:00", + "Rows written": 2778, + "Rows read": 19305, + Queries: 491, + "Payments completed": 81, + "Sign ups": 76, + Logins: 1458, + }, + { + date: "2024-02-02T00:00:00", + "Rows written": 2749, + "Rows read": 19095, + Queries: 495, + "Payments completed": 80, + "Sign ups": 77, + Logins: 1712, + }, + { + date: "2024-02-03T00:00:00", + "Rows written": 2711, + "Rows read": 18932, + Queries: 425, + "Payments completed": 68, + "Sign ups": 70, + Logins: 1704, + }, + { + date: "2024-02-04T00:00:00", + "Rows written": 2719, + "Rows read": 19181, + Queries: 369, + "Payments completed": 69, + "Sign ups": 62, + Logins: 1393, + }, + { + date: "2024-02-05T00:00:00", + "Rows written": 2708, + "Rows read": 19141, + Queries: 500, + "Payments completed": 85, + "Sign ups": 62, + Logins: 1235, + }, + { + date: "2024-02-06T00:00:00", + "Rows written": 2726, + "Rows read": 19575, + Queries: 495, + "Payments completed": 88, + "Sign ups": 80, + Logins: 1100, + }, + { + date: "2024-02-07T00:00:00", + "Rows written": 2752, + "Rows read": 20265, + Queries: 491, + "Payments completed": 87, + "Sign ups": 71, + Logins: 932, + }, + { + date: "2024-02-08T00:00:00", + "Rows written": 2754, + "Rows read": 20236, + Queries: 485, + "Payments completed": 83, + "Sign ups": 75, + Logins: 868, + }, + { + date: "2024-02-09T00:00:00", + "Rows written": 2776, + "Rows read": 19659, + Queries: 478, + "Payments completed": 89, + "Sign ups": 77, + Logins: 878, + }, + { + date: "2024-02-10T00:00:00", + "Rows written": 2794, + "Rows read": 19108, + Queries: 392, + "Payments completed": 72, + "Sign ups": 58, + Logins: 1033, + }, + { + date: "2024-02-11T00:00:00", + "Rows written": 2796, + "Rows read": 18407, + Queries: 382, + "Payments completed": 67, + "Sign ups": 53, + Logins: 1008, + }, + { + date: "2024-02-12T00:00:00", + "Rows written": 2774, + "Rows read": 18053, + Queries: 498, + "Payments completed": 83, + "Sign ups": 66, + Logins: 960, + }, + { + date: "2024-02-13T00:00:00", + "Rows written": 2747, + "Rows read": 18058, + Queries: 493, + "Payments completed": 80, + "Sign ups": 63, + Logins: 858, + }, + { + date: "2024-02-14T00:00:00", + "Rows written": 2741, + "Rows read": 18290, + Queries: 492, + "Payments completed": 82, + "Sign ups": 60, + Logins: 942, + }, + { + date: "2024-02-15T00:00:00", + "Rows written": 2724, + "Rows read": 18708, + Queries: 491, + "Payments completed": 83, + "Sign ups": 61, + Logins: 1015, + }, + { + date: "2024-02-16T00:00:00", + "Rows written": 2705, + "Rows read": 18405, + Queries: 491, + "Payments completed": 86, + "Sign ups": 61, + Logins: 1067, + }, + { + date: "2024-02-17T00:00:00", + "Rows written": 2699, + "Rows read": 18713, + Queries: 372, + "Payments completed": 73, + "Sign ups": 53, + Logins: 1175, + }, + { + date: "2024-02-18T00:00:00", + "Rows written": 2693, + "Rows read": 18576, + Queries: 393, + "Payments completed": 75, + "Sign ups": 56, + Logins: 1411, + }, + { + date: "2024-02-19T00:00:00", + "Rows written": 2704, + "Rows read": 18344, + Queries: 495, + "Payments completed": 90, + "Sign ups": 65, + Logins: 1586, + }, + { + date: "2024-02-20T00:00:00", + "Rows written": 2728, + "Rows read": 18769, + Queries: 500, + "Payments completed": 83, + "Sign ups": 78, + Logins: 1792, + }, + { + date: "2024-02-21T00:00:00", + "Rows written": 2756, + "Rows read": 19252, + Queries: 507, + "Payments completed": 82, + "Sign ups": 61, + Logins: 1837, + }, + { + date: "2024-02-22T00:00:00", + "Rows written": 2792, + "Rows read": 19917, + Queries: 509, + "Payments completed": 83, + "Sign ups": 65, + Logins: 1818, + }, + { + date: "2024-02-23T00:00:00", + "Rows written": 2827, + "Rows read": 20473, + Queries: 509, + "Payments completed": 86, + "Sign ups": 68, + Logins: 1460, + }, + { + date: "2024-02-24T00:00:00", + "Rows written": 2822, + "Rows read": 21263, + Queries: 402, + "Payments completed": 76, + "Sign ups": 67, + Logins: 1232, + }, + { + date: "2024-02-25T00:00:00", + "Rows written": 2825, + "Rows read": 22081, + Queries: 432, + "Payments completed": 75, + "Sign ups": 49, + Logins: 1122, + }, + { + date: "2024-02-26T00:00:00", + "Rows written": 2849, + "Rows read": 22955, + Queries: 487, + "Payments completed": 84, + "Sign ups": 62, + Logins: 1118, + }, + { + date: "2024-02-27T00:00:00", + "Rows written": 2841, + "Rows read": 23908, + Queries: 484, + "Payments completed": 110, + "Sign ups": 79, + Logins: 1247, + }, + { + date: "2024-02-28T00:00:00", + "Rows written": 2857, + "Rows read": 23777, + Queries: 481, + "Payments completed": 91, + "Sign ups": 64, + Logins: 1231, + }, + { + date: "2024-02-29T00:00:00", + "Rows written": 2878, + "Rows read": 23296, + Queries: 484, + "Payments completed": 89, + "Sign ups": 79, + Logins: 991, + }, + { + date: "2024-03-01T00:00:00", + "Rows written": 2881, + "Rows read": 22647, + Queries: 483, + "Payments completed": 110, + "Sign ups": 71, + Logins: 865, + }, + { + date: "2024-03-02T00:00:00", + "Rows written": 2887, + "Rows read": 22725, + Queries: 363, + "Payments completed": 100, + "Sign ups": 65, + Logins: 855, + }, + { + date: "2024-03-03T00:00:00", + "Rows written": 2869, + "Rows read": 22226, + Queries: 393, + "Payments completed": 91, + "Sign ups": 64, + Logins: 859, + }, + { + date: "2024-03-04T00:00:00", + "Rows written": 2877, + "Rows read": 22120, + Queries: 495, + "Payments completed": 122, + "Sign ups": 61, + Logins: 867, + }, + { + date: "2024-03-05T00:00:00", + "Rows written": 2875, + "Rows read": 22533, + Queries: 494, + "Payments completed": 109, + "Sign ups": 60, + Logins: 879, + }, + { + date: "2024-03-06T00:00:00", + "Rows written": 2860, + "Rows read": 22166, + Queries: 489, + "Payments completed": 98, + "Sign ups": 65, + Logins: 869, + }, + { + date: "2024-03-07T00:00:00", + "Rows written": 2872, + "Rows read": 21895, + Queries: 482, + "Payments completed": 104, + "Sign ups": 77, + Logins: 877, + }, + { + date: "2024-03-08T00:00:00", + "Rows written": 2852, + "Rows read": 21563, + Queries: 479, + "Payments completed": 82, + "Sign ups": 73, + Logins: 852, + }, + { + date: "2024-03-09T00:00:00", + "Rows written": 2822, + "Rows read": 20981, + Queries: 409, + "Payments completed": 76, + "Sign ups": 49, + Logins: 979, + }, + { + date: "2024-03-10T00:00:00", + "Rows written": 2835, + "Rows read": 21256, + Queries: 387, + "Payments completed": 68, + "Sign ups": 50, + Logins: 1138, + }, + { + date: "2024-03-11T00:00:00", + "Rows written": 2831, + "Rows read": 21702, + Queries: 497, + "Payments completed": 83, + "Sign ups": 60, + Logins: 1026, + }, + { + date: "2024-03-12T00:00:00", + "Rows written": 2807, + "Rows read": 22104, + Queries: 494, + "Payments completed": 81, + "Sign ups": 70, + Logins: 858, + }, + { + date: "2024-03-13T00:00:00", + "Rows written": 2803, + "Rows read": 22714, + Queries: 489, + "Payments completed": 106, + "Sign ups": 74, + Logins: 879, + }, + { + date: "2024-03-14T00:00:00", + "Rows written": 2825, + "Rows read": 22484, + Queries: 483, + "Payments completed": 116, + "Sign ups": 72, + Logins: 844, + }, + { + date: "2024-03-15T00:00:00", + "Rows written": 2811, + "Rows read": 22589, + Queries: 480, + "Payments completed": 120, + "Sign ups": 73, + Logins: 852, + }, + { + date: "2024-03-16T00:00:00", + "Rows written": 2815, + "Rows read": 21999, + Queries: 391, + "Payments completed": 94, + "Sign ups": 60, + Logins: 860, + }, + { + date: "2024-03-17T00:00:00", + "Rows written": 2842, + "Rows read": 21627, + Queries: 440, + "Payments completed": 92, + "Sign ups": 69, + Logins: 920, + }, + { + date: "2024-03-18T00:00:00", + "Rows written": 2864, + "Rows read": 21708, + Queries: 486, + "Payments completed": 82, + "Sign ups": 75, + Logins: 856, + }, + { + date: "2024-03-19T00:00:00", + "Rows written": 2877, + "Rows read": 21501, + Queries: 489, + "Payments completed": 114, + "Sign ups": 70, + Logins: 845, + }, + { + date: "2024-03-20T00:00:00", + "Rows written": 2900, + "Rows read": 21927, + Queries: 489, + "Payments completed": 107, + "Sign ups": 80, + Logins: 848, + }, + { + date: "2024-03-21T00:00:00", + "Rows written": 2887, + "Rows read": 22358, + Queries: 490, + "Payments completed": 81, + "Sign ups": 61, + Logins: 847, + }, + { + date: "2024-03-22T00:00:00", + "Rows written": 2903, + "Rows read": 22301, + Queries: 488, + "Payments completed": 84, + "Sign ups": 63, + Logins: 847, + }, + { + date: "2024-03-23T00:00:00", + "Rows written": 2920, + "Rows read": 21875, + Queries: 420, + "Payments completed": 66, + "Sign ups": 61, + Logins: 852, + }, + { + date: "2024-03-24T00:00:00", + "Rows written": 2951, + "Rows read": 21585, + Queries: 370, + "Payments completed": 66, + "Sign ups": 51, + Logins: 952, + }, + { + date: "2024-03-25T00:00:00", + "Rows written": 2944, + "Rows read": 20899, + Queries: 499, + "Payments completed": 101, + "Sign ups": 63, + Logins: 1030, + }, + { + date: "2024-03-26T00:00:00", + "Rows written": 2923, + "Rows read": 20352, + Queries: 504, + "Payments completed": 124, + "Sign ups": 78, + Logins: 1009, + }, + { + date: "2024-03-27T00:00:00", + "Rows written": 2894, + "Rows read": 19832, + Queries: 510, + "Payments completed": 100, + "Sign ups": 70, + Logins: 868, + }, + { + date: "2024-03-28T00:00:00", + "Rows written": 2886, + "Rows read": 19542, + Queries: 510, + "Payments completed": 92, + "Sign ups": 76, + Logins: 852, + }, + { + date: "2024-03-29T00:00:00", + "Rows written": 2874, + "Rows read": 19368, + Queries: 507, + "Payments completed": 83, + "Sign ups": 71, + Logins: 906, + }, + { + date: "2024-03-30T00:00:00", + "Rows written": 2869, + "Rows read": 19312, + Queries: 383, + "Payments completed": 75, + "Sign ups": 66, + Logins: 866, + }, + { + date: "2024-03-31T00:00:00", + "Rows written": 2848, + "Rows read": 19578, + Queries: 410, + "Payments completed": 83, + "Sign ups": 68, + Logins: 1000, + }, + { + date: "2024-03-31T00:00:00", + "Rows written": 2854, + "Rows read": 19837, + Queries: 492, + "Payments completed": 119, + "Sign ups": 74, + Logins: 1204, + }, + { + date: "2024-04-01T00:00:00", + "Rows written": 2837, + "Rows read": 19406, + Queries: 486, + "Payments completed": 124, + "Sign ups": 73, + Logins: 1374, + }, + { + date: "2024-04-02T00:00:00", + "Rows written": 2826, + "Rows read": 19050, + Queries: 480, + "Payments completed": 103, + "Sign ups": 71, + Logins: 1649, + }, + { + date: "2024-04-03T00:00:00", + "Rows written": 2821, + "Rows read": 18973, + Queries: 481, + "Payments completed": 117, + "Sign ups": 76, + Logins: 1686, + }, + { + date: "2024-04-04T00:00:00", + "Rows written": 2806, + "Rows read": 18537, + Queries: 485, + "Payments completed": 102, + "Sign ups": 70, + Logins: 1373, + }, + { + date: "2024-04-05T00:00:00", + "Rows written": 2774, + "Rows read": 18124, + Queries: 379, + "Payments completed": 70, + "Sign ups": 53, + Logins: 1512, + }, + { + date: "2024-04-06T00:00:00", + "Rows written": 2734, + "Rows read": 18031, + Queries: 436, + "Payments completed": 82, + "Sign ups": 63, + Logins: 1593, + }, + { + date: "2024-04-07T00:00:00", + "Rows written": 2738, + "Rows read": 18081, + Queries: 485, + "Payments completed": 93, + "Sign ups": 61, + Logins: 1926, + }, + { + date: "2024-04-08T00:00:00", + "Rows written": 2765, + "Rows read": 18042, + Queries: 491, + "Payments completed": 123, + "Sign ups": 67, + Logins: 2001, + }, + { + date: "2024-04-09T00:00:00", + "Rows written": 2756, + "Rows read": 18006, + Queries: 490, + "Payments completed": 112, + "Sign ups": 78, + Logins: 1983, + }, + { + date: "2024-04-10T00:00:00", + "Rows written": 2726, + "Rows read": 18097, + Queries: 493, + "Payments completed": 118, + "Sign ups": 74, + Logins: 1946, + }, + { + date: "2024-04-11T00:00:00", + "Rows written": 2691, + "Rows read": 18124, + Queries: 494, + "Payments completed": 114, + "Sign ups": 71, + Logins: 1956, + }, + { + date: "2024-04-12T00:00:00", + "Rows written": 2699, + "Rows read": 18115, + Queries: 431, + "Payments completed": 85, + "Sign ups": 69, + Logins: 1991, + }, + { + date: "2024-04-13T00:00:00", + "Rows written": 2696, + "Rows read": 18096, + Queries: 387, + "Payments completed": 75, + "Sign ups": 64, + Logins: 1795, + }, + { + date: "2024-04-14T00:00:00", + "Rows written": 2673, + "Rows read": 18251, + Queries: 496, + "Payments completed": 82, + "Sign ups": 77, + Logins: 1687, + }, + { + date: "2024-04-15T00:00:00", + "Rows written": 2669, + "Rows read": 18003, + Queries: 491, + "Payments completed": 81, + "Sign ups": 79, + Logins: 1440, + }, + { + date: "2024-04-16T00:00:00", + "Rows written": 2676, + "Rows read": 18017, + Queries: 485, + "Payments completed": 87, + "Sign ups": 73, + Logins: 1589, + }, + { + date: "2024-04-17T00:00:00", + "Rows written": 2654, + "Rows read": 18088, + Queries: 485, + "Payments completed": 81, + "Sign ups": 75, + Logins: 1949, + }, + { + date: "2024-04-18T00:00:00", + "Rows written": 2635, + "Rows read": 18115, + Queries: 483, + "Payments completed": 106, + "Sign ups": 71, + Logins: 2028, + }, + { + date: "2024-04-19T00:00:00", + "Rows written": 2644, + "Rows read": 18138, + Queries: 379, + "Payments completed": 98, + "Sign ups": 65, + Logins: 2036, + }, + { + date: "2024-04-20T00:00:00", + "Rows written": 2672, + "Rows read": 18004, + Queries: 441, + "Payments completed": 101, + "Sign ups": 68, + Logins: 1991, + }, + { + date: "2024-04-21T00:00:00", + "Rows written": 2700, + "Rows read": 18113, + Queries: 485, + "Payments completed": 97, + "Sign ups": 60, + Logins: 2006, + }, + { + date: "2024-04-22T00:00:00", + "Rows written": 2729, + "Rows read": 18033, + Queries: 485, + "Payments completed": 85, + "Sign ups": 61, + Logins: 2006, + }, + { + date: "2024-04-23T00:00:00", + "Rows written": 2735, + "Rows read": 18083, + Queries: 486, + "Payments completed": 85, + "Sign ups": 80, + Logins: 1882, + }, + { + date: "2024-04-24T00:00:00", + "Rows written": 2734, + "Rows read": 18028, + Queries: 486, + "Payments completed": 112, + "Sign ups": 74, + Logins: 1801, + }, + { + date: "2024-04-25T00:00:00", + "Rows written": 2745, + "Rows read": 18037, + Queries: 486, + "Payments completed": 120, + "Sign ups": 72, + Logins: 1453, + }, + { + date: "2024-04-26T00:00:00", + "Rows written": 2742, + "Rows read": 18006, + Queries: 380, + "Payments completed": 99, + "Sign ups": 56, + Logins: 1264, + }, + { + date: "2024-04-27T00:00:00", + "Rows written": 2717, + "Rows read": 18439, + Queries: 446, + "Payments completed": 85, + "Sign ups": 65, + Logins: 938, + }, + { + date: "2024-04-28T00:00:00", + "Rows written": 2707, + "Rows read": 18285, + Queries: 484, + "Payments completed": 85, + "Sign ups": 62, + Logins: 942, + }, + { + date: "2024-04-29T00:00:00", + "Rows written": 2677, + "Rows read": 18258, + Queries: 481, + "Payments completed": 84, + "Sign ups": 63, + Logins: 1061, + }, + { + date: "2024-04-30T00:00:00", + "Rows written": 2685, + "Rows read": 18298, + Queries: 479, + "Payments completed": 88, + "Sign ups": 71, + Logins: 1289, + }, + { + date: "2024-05-01T00:00:00", + "Rows written": 2687, + "Rows read": 18361, + Queries: 479, + "Payments completed": 88, + "Sign ups": 78, + Logins: 1339, + }, + { + date: "2024-05-02T00:00:00", + "Rows written": 2670, + "Rows read": 18576, + Queries: 480, + "Payments completed": 90, + "Sign ups": 76, + Logins: 1142, + }, + { + date: "2024-05-03T00:00:00", + "Rows written": 2635, + "Rows read": 19046, + Queries: 396, + "Payments completed": 71, + "Sign ups": 51, + Logins: 948, + }, + { + date: "2024-05-04T00:00:00", + "Rows written": 2617, + "Rows read": 19808, + Queries: 375, + "Payments completed": 82, + "Sign ups": 51, + Logins: 1018, + }, + { + date: "2024-05-05T00:00:00", + "Rows written": 2627, + "Rows read": 20325, + Queries: 498, + "Payments completed": 90, + "Sign ups": 64, + Logins: 1137, + }, + { + date: "2024-05-06T00:00:00", + "Rows written": 2624, + "Rows read": 20838, + Queries: 503, + "Payments completed": 119, + "Sign ups": 78, + Logins: 1047, + }, + { + date: "2024-05-07T00:00:00", + "Rows written": 2596, + "Rows read": 21694, + Queries: 503, + "Payments completed": 111, + "Sign ups": 72, + Logins: 848, + }, + { + date: "2024-05-08T00:00:00", + "Rows written": 2607, + "Rows read": 22529, + Queries: 499, + "Payments completed": 106, + "Sign ups": 70, + Logins: 861, + }, + { + date: "2024-05-09T00:00:00", + "Rows written": 2637, + "Rows read": 23550, + Queries: 493, + "Payments completed": 120, + "Sign ups": 76, + Logins: 979, + }, + { + date: "2024-05-10T00:00:00", + "Rows written": 2675, + "Rows read": 24491, + Queries: 379, + "Payments completed": 67, + "Sign ups": 65, + Logins: 928, + }, + { + date: "2024-05-11T00:00:00", + "Rows written": 2718, + "Rows read": 25709, + Queries: 428, + "Payments completed": 65, + "Sign ups": 48, + Logins: 990, + }, + { + date: "2024-05-12T00:00:00", + "Rows written": 2723, + "Rows read": 26600, + Queries: 488, + "Payments completed": 82, + "Sign ups": 63, + Logins: 1122, + }, + { + date: "2024-05-13T00:00:00", + "Rows written": 2715, + "Rows read": 27252, + Queries: 490, + "Payments completed": 83, + "Sign ups": 64, + Logins: 1285, + }, + { + date: "2024-05-14T00:00:00", + "Rows written": 2715, + "Rows read": 27298, + Queries: 489, + "Payments completed": 86, + "Sign ups": 79, + Logins: 1516, + }, + { + date: "2024-05-15T00:00:00", + "Rows written": 2734, + "Rows read": 27457, + Queries: 490, + "Payments completed": 89, + "Sign ups": 74, + Logins: 1803, + }, + { + date: "2024-05-16T00:00:00", + "Rows written": 2765, + "Rows read": 27539, + Queries: 486, + "Payments completed": 88, + "Sign ups": 73, + Logins: 2045, + }, +] diff --git a/src/data/schema.ts b/src/data/schema.ts new file mode 100644 index 0000000..3c4d92c --- /dev/null +++ b/src/data/schema.ts @@ -0,0 +1,18 @@ +export type Usage = { + owner: string + status: string + costs: number + region: string + stability: number + lastEdited: string +} + +export type OverviewData = { + date: string + "Rows written": number + "Rows read": number + Queries: number + "Payments completed": number + "Sign ups": number + Logins: number +} diff --git a/src/lib/chartUtils.ts b/src/lib/chartUtils.ts new file mode 100644 index 0000000..481fd8b --- /dev/null +++ b/src/lib/chartUtils.ts @@ -0,0 +1,120 @@ +// Tremor Raw chartColors [v0.0.0] + +export type ColorUtility = "bg" | "stroke" | "fill" | "text" + +export const chartColors = { + blue: { + bg: "bg-blue-500", + stroke: "stroke-blue-500", + fill: "fill-blue-500", + text: "text-blue-500", + }, + emerald: { + bg: "bg-emerald-500", + stroke: "stroke-emerald-500", + fill: "fill-emerald-500", + text: "text-emerald-500", + }, + violet: { + bg: "bg-violet-500", + stroke: "stroke-violet-500", + fill: "fill-violet-500", + text: "text-violet-500", + }, + amber: { + bg: "bg-amber-500", + stroke: "stroke-amber-500", + fill: "fill-amber-500", + text: "text-amber-500", + }, + gray: { + bg: "bg-gray-400 dark:bg-gray-600", + stroke: "stroke-gray-400 dark:stroke-gray-600", + fill: "fill-gray-400 dark:fill-gray-600", + text: "text-gray-400 dark:text-gray-600", + }, + cyan: { + bg: "bg-cyan-500", + stroke: "stroke-cyan-500", + fill: "fill-cyan-500", + text: "text-cyan-500", + }, + indigo: { + bg: "bg-indigo-600 dark:bg-indigo-500", + stroke: "stroke-indigo-600 dark:stroke-indigo-500", + fill: "fill-indigo-600 dark:fill-indigo-500", + text: "text-indigo-600 dark:text-indigo-500", + }, + pink: { + bg: "bg-pink-500", + stroke: "stroke-pink-500", + fill: "fill-pink-500", + text: "text-pink-500", + }, +} as const satisfies { + [color: string]: { + [key in ColorUtility]: string + } +} + +export type AvailableChartColorsKeys = keyof typeof chartColors + +export const AvailableChartColors: AvailableChartColorsKeys[] = Object.keys( + chartColors, +) as Array + +export const constructCategoryColors = ( + categories: string[], + colors: AvailableChartColorsKeys[], +): Map => { + const categoryColors = new Map() + categories.forEach((category, index) => { + categoryColors.set(category, colors[index % colors.length]) + }) + return categoryColors +} + +export const getColorClassName = ( + color: AvailableChartColorsKeys, + type: ColorUtility, +): string => { + const fallbackColor = { + bg: "bg-gray-500", + stroke: "stroke-gray-500", + fill: "fill-gray-500", + text: "text-gray-500", + } + return chartColors[color]?.[type] ?? fallbackColor[type] +} + +// Tremor Raw getYAxisDomain [v0.0.0] + +export const getYAxisDomain = ( + autoMinValue: boolean, + minValue: number | undefined, + maxValue: number | undefined, +) => { + const minDomain = autoMinValue ? "auto" : minValue ?? 0 + const maxDomain = maxValue ?? "auto" + return [minDomain, maxDomain] +} + +// Tremor Raw hasOnlyOneValueForKey [v0.1.0] + +export function hasOnlyOneValueForKey( + array: any[], + keyToCheck: string, +): boolean { + const val: any[] = [] + + for (const obj of array) { + if (Object.prototype.hasOwnProperty.call(obj, keyToCheck)) { + val.push(obj[keyToCheck]) + if (val.length > 1) { + return false + } + } + } + + return true +} diff --git a/src/lib/useOnWindowResize.tsx b/src/lib/useOnWindowResize.tsx new file mode 100644 index 0000000..12ee26b --- /dev/null +++ b/src/lib/useOnWindowResize.tsx @@ -0,0 +1,15 @@ +// Tremor Raw useOnWindowResize [v0.0.0] + +import * as React from "react" + +export const useOnWindowResize = (handler: { (): void }) => { + React.useEffect(() => { + const handleResize = () => { + handler() + } + handleResize() + window.addEventListener("resize", handleResize) + + return () => window.removeEventListener("resize", handleResize) + }, [handler]) +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..f745fc9 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,77 @@ +// Tremor Raw cx [v0.0.0] + +import clsx, { type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cx(...args: ClassValue[]) { + return twMerge(clsx(...args)) +} + +// Tremor Raw focusInput [v0.0.1] + +export const focusInput = [ + // base + "focus:ring-2", + // ring color + "focus:ring-indigo-200 focus:dark:ring-indigo-700/30", + // border color + "focus:border-indigo-500 focus:dark:border-indigo-700", +] + +// Tremor Raw focusRing [v0.0.1] + +export const focusRing = [ + // base + "outline outline-offset-2 outline-0 focus-visible:outline-2", + // outline color + "outline-indigo-500 dark:outline-indigo-500", +] + +// Tremor Raw hasErrorInput [v0.0.1] + +export const hasErrorInput = [ + // base + "ring-2", + // border color + "border-red-500 dark:border-red-700", + // ring color + "ring-red-200 dark:ring-red-700/30", +] + +// Number formatter function + +export const usNumberformatter = (number: number, decimals = 0) => + Intl.NumberFormat("us", { + minimumFractionDigits: decimals, + maximumFractionDigits: decimals, + }) + .format(Number(number)) + .toString() + +export const percentageFormatter = (number: number, decimals = 1) => { + const formattedNumber = new Intl.NumberFormat("en-US", { + style: "percent", + minimumFractionDigits: decimals, + maximumFractionDigits: decimals, + }).format(number) + const symbol = number > 0 && number !== Infinity ? "+" : "" + + return `${symbol}${formattedNumber}` +} + +export const millionFormatter = (number: number, decimals = 1) => { + const formattedNumber = new Intl.NumberFormat("en-US", { + style: "decimal", + minimumFractionDigits: decimals, + maximumFractionDigits: decimals, + }).format(number) + return `${formattedNumber}M` +} +export const formatters: { [key: string]: any } = { + currency: (number: number, currency: string = "USD") => + new Intl.NumberFormat("en-US", { + style: "currency", + currency: currency, + }).format(number), + unit: (number: number) => `${usNumberformatter(number)}`, +} diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..a685ac6 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,65 @@ +import type { Config } from "tailwindcss" + +const config: Config = { + darkMode: "selector", + content: ["./src/**/*.{js,ts,jsx,tsx,mdx}"], + theme: { + extend: { + keyframes: { + hide: { + from: { opacity: "1" }, + to: { opacity: "0" }, + }, + slideDownAndFade: { + from: { opacity: "0", transform: "translateY(-6px)" }, + to: { opacity: "1", transform: "translateY(0)" }, + }, + slideLeftAndFade: { + from: { opacity: "0", transform: "translateX(6px)" }, + to: { opacity: "1", transform: "translateX(0)" }, + }, + slideUpAndFade: { + from: { opacity: "0", transform: "translateY(6px)" }, + to: { opacity: "1", transform: "translateY(0)" }, + }, + slideRightAndFade: { + from: { opacity: "0", transform: "translateX(-6px)" }, + to: { opacity: "1", transform: "translateX(0)" }, + }, + dialogOverlayShow: { + from: { opacity: "0" }, + to: { opacity: "1" }, + }, + dialogContentShow: { + from: { + opacity: "0", + transform: "translate(-50%, -45%) scale(0.95)", + }, + to: { opacity: "1", transform: "translate(-50%, -50%) scale(1)" }, + }, + drawerSlideLeftAndFade: { + from: { opacity: "0", transform: "translateX(50%)" }, + to: { opacity: "1", transform: "translateX(0)" }, + }, + }, + animation: { + hide: "hide 150ms cubic-bezier(0.16, 1, 0.3, 1)", + slideDownAndFade: + "slideDownAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1)", + slideLeftAndFade: + "slideLeftAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1)", + slideUpAndFade: "slideUpAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1)", + slideRightAndFade: + "slideRightAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1)", + drawerSlideLeftAndFade: + "drawerSlideLeftAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1)", + dialogOverlayShow: + "dialogOverlayShow 150ms cubic-bezier(0.16, 1, 0.3, 1)", + dialogContentShow: + "dialogContentShow 150ms cubic-bezier(0.16, 1, 0.3, 1)", + }, + }, + }, + plugins: [require("@tailwindcss/forms")], +} +export default config diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7b28589 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +}

    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 z zHafdKO-v$|OFF`Apeu|o%XZ-Og}`=Dt1HB92ke)DUWcyG%67nGo|1MaofS8;s@Az**hNF!LyoQ@u^{L9iH#|9W=BZgk#?dMxCYuQ*8dMZ_*Cr zmSFDRyefS}27y!P0d;nO&{kyQxl(E0*Wr_7dh1`icbls&lnx9{+?m-9?g?!N!5MRb zEwR>iki5(N*A2nvWI-K?ke( zn}YcXe1eb>@j1cH1+Lq;+1$tbVP4;_(czEk94z5inip_@4rD7GS{&s}sjBTjXUv7R z#6VZjITBi1uyw{-+kwu7_0}1k?Lc!fb|LI?=A-P#EI8YNU;mGc69H?=V<_ zcA&Y~=Leig-Ind3O@3g!6kJ0O;ajpr4J}{o$5;*W8`2X`U@wC2bFLV28T=XjY?$W# zUUYb$mb-lp<}7Rg`%8lyuWr8G)OHa09ZW=i2Z8Ni()o*5Z3n@*)QxNhab2NNJR|bu zJBmMZYkrbDu}?@I$@Ttj1~!E z-!0u+Ij6GIp ze~@*?Z3o5=qIJf&?Lg}afge(!D?rDA-$9@&m@P4GJHUp59RXVsdIh}Xv8m3^r5_}m zM)lj;OSyp}aB>4NwIV-5XFPfL~doeqEWaJijz_-^Sot#Zx=AlcQ$r3xR`~i?I4O-P&}iHS@8T0oUR~S5_=sueh}IY@H2I zvh5(g&RC6EaPiIZ<6}N?c0}P2xMZ=6toL(fB|5~Jscmz;v@I{29t6aPWe40=d0w&{ zu|Zt$aCCo-RadlcI=tvE(YLl&dhB<3vjJQJ8$fQ5xF;dpo&(PPR-e8~x*320lgfFPwt*kuSk9(%9E?G@vjV zy^xJpIsj*i?{>Z!($!kh{z}r})1ZIW0SE01JgnG8%2Dayn+;%?e1V4*U(c6{ zH=oU>1?v3XCQPbgjf3@!+eYcfkOkALJomf(;8F7JOP{D_zy|n4|Y5 zd#4%CcJwbeGN-&O`j?HV+!7J<33n9Iq7rmpKqWci{z!_A`@$8SpK6=DIJuJUg_TuLJ9^zowv;W@B<8wnlpdB=@ zkq+Mr@3%Emcq@97WXyFPG%3&8X9(!L>ILRNY+a09FJs^Dvd}zjuCdu^?x~UKWxL~? zJ$z9De{>h)pm@|N7q{|+3`bMf2tkGD@z>$FYenlw^HaoKF6bH#&vk+owyEFylfz2? zaeBv254|I+=$x(u9ez)s!#kNiro)GOny@dX(K~xy1oUomyrcI!h>7pp0Hpk($Y)#Y z@V(G+w`G0$e`){jRlR1C^3Y~dozAAebC~EK{Hc@aMeotNoaPnUTh-xrIUOEf=Bf_g zo=ksgeA9x?;yQ7+_Sz@*Jre+DTxk|Me7CeuIir8pPhZaIKjYEwy?W^Xb@YGDtNqsh z{rTNrhmXtjtjn>F3_3hEC1T2nU1CouWO~--0v*08(-WVbAk#Y?o|txG+k1yz|7+-n z4&N*N+xp)tIsNw^K|1`Rqkqv?zv$nm`S`k=t;72|JT^Pqn5T$e+KuaW6x zr}uPt^!Qwd*Sy>dO?Oh3@x`}-^?&i}T>kHn9{ZhL^mQln#+=L8bu!lN=A~X=rmyPo z)pdAhvvce4p$?z44lf;^{bpE~Lx;C@xm<_OX588xUq7Ftf7xm9q0H&O-_+ds_n`kY z{eKz%IK4aHTC>^VTN~=|_|~!xFBv3Z9o}U6+I4u&yD~ey=62@y#gWqCGg_DPX*BC+ z+s!;NjKw|RvGXBA4|r&ugIK#tYZkgdSKtlPUC;0IbP!oueWu0i$3PWpsrdGq{6Hh~9U8-@XkUqGX=Ej}U-IBdan0+Z=E4@cue{tqyO#^tC!XzVyBh&$?W& z4)4kHk#FtBlPh^0o;|@Y9V!*It}znl9T@GVaR-lB10=@sy!HU>BRc1w>Hq@gC7VJ2 z#K-wMJo-Q@9iDT9oeuB$($}oRkDv|@XcZ%PT=tB)G}lbhpt)hG1KPLwpEUsKm&ZFm z$vkTxA;8|B*l3`2uDDEJ6A!O=xhNjq)8Q2p?`-t=(nmHs&GDn4!zT@e=zos23u307 z-ZVmTd$&Bq$&G>oGNj3l$dqpWKd^5u36A-@!9(C@`*+VSDmE4#K#VMBHsNb$zO|g$ zXuh>o9o~zFH=Esv=UB=ZRCKX$<*-QG&2d=H>*a4qXH=ce~8GFHUZAnP;l z6GKOgJbU0g6#CXXKU-*D``>6?ZgwTd$EE>Oot?VOdPmlN(}R=^oJ=ozw>jSEz0Niy z{IR{$(2Jheg$(&Ko%?HiK=@Tk1MYbp=|KS7AN<<*HZp+r0*ZX{+3IXwAO$x6f_kBSW-uEW>HXdH<4N`$5ZpY0&-n!OU)ONldnxrotXPc`y@ zU)V_`2i&#tM}4$HKu`B<479 z9NHOn`lo%4=0lm@)_cvLi+(s+P+=(I()Ft!jAg=&&?JT#$96zwu|-OhZM7QW@_8qS)KKv{UkTo7_t|c z><7zyS8~z`d!OG23jv+Yx&i-e&*yiUxD?KBW6TEIx|Q*D`2n2xiR58)TxSE&yxIwU zrkyv5-c6==`=5t0JvNIZ9UgfG{|?*#-1b?h+5bFR|8c$^3-?WImThQrG3k6yw-2Fc zpLStG6pV5mU`S9~>((dn&tz;G;Gy`zkrR#|+tZz8@!2-oH{7CqP6p7Kz(X~N ztFST1{^%E=qe;%iOaLZ%>;a#o+)L~M8Uuf>1?G;yD3_JXQ zGoM#6KX_`#)B-v)cC##O0C9R}oxxw1!)6!Jd$L+& zG1B3^b-7v{es={sMC}=7q5oFW8D{3Q9qzM`*4}AG`;G95_rNEY0cz>7pT9)=8+x7l z+u#*}?cm5v>GFu%4)6uW-v$54PWMnUI2yhCI=tEGu`5Jz*IJijy)oGTyk3X5{m&yE z-o<6r#$-vBZ(E1&1TS0BzV($p3jda6e_q!~{dwMWARzjmOJk0*@oe+HczJ|v2R~9A zwAlcl+eY)B!OEw1#sYrq)4R#^?48Fsjpm_uUx#OYH+p9sF*t`j zh{24`ArIH(@UMGBI=tH}(OZX)@13SOey$fCzFmAGUnjJ0d;#5twWnML=mgTe=hZwj zhx}#ZFeLXCZ##H==j1HDz^tj;I-pyV3-w*-ojG25ud@+2nLc6v^VT|i^}K^l(WK&yDuem^++JM0okm;hA!GP|r)Xf&ezZ6(aX{!w-hWb|5=^iG7dRGr`5d z%SJD|V7PZ$^~}N~UwYBG+bc1xb@)~|(QSH~v~T<)*8{p8jn?H>xZK|*KTym9eg}QF z9cX`)b?kkN-cH<1e6K`eQ1pCw`?Pbvv=p&feZ`x-J%oq9>!r$CCuydp$ zu3vFs3#>omhk{=zzGluJCFciq`hd+l;2yk^HG9_WIM-}7^MHQn`v!aNKJBx&IOA}k zv_Izo9kKxVn#>U|!oKUT=pt4OpHzHMe0~tg2EuuG?rPT)=sz%FpK4;~@#pUl^dpmf zV6-pzGgmQpaUK+)gk<&x1FUlQ&Z?B$>4VyB6Bd|7iA zxC$PF&u<>gb%ADB#u~ricPIGE9FK4L^V)wIe{}p$@G<3LU*>1DFFX8zGg|ObgC78M z<~{a$7pyDNy(;VrYPJI>AA~Ym(ipDvci`Ten+{BBT zKMH%cis4F0Y)!GgYI)32m3XI=Mr+wN_KZw)e>=SsRbpKU% zR^^~+e^EG#-UaVvo?`A2PM(mAI*aWJyuo1$cgV)%yp)2cdm`%!~*4ey`ZD*`u2C`$YGP_@?2Lh94?-&h+H$2KWIo0_V3d z2Ivj&4(tcSq}SRGg0%(CcdoG=XiSAm(OCIy8`fvTMPy9uP3T6CPfe~G{BraDplDyZ zrce9CJ#&W0W7{U9Jpm+xE~AGsPKHAc&krBE)5r7GBm!JMdbsSv!{EZ*!A5dGBiP&{ zAN6}SZ!F!j1wS?I?L4tbd%tdS{NS{BL%tTFeZ*4B-jqHGhi=6HekIbT4&UF zne706K${x1*KhkEo@tlU{nh?g)F0yT&+OW@ZZ+W3z-V9i!QA1~K62=Tnu8uJZi#6B zyv_;>bpK=@)+@Ihl1*Us=mSpPzva+eD>`Y#1AN?OPj~sM&W3*J%kTpBf<`vLhy4L3 z9|SQi>@#P!1GhddUCp;0n6BWjGul2F@B?307#4njT!}6N55wN{qwU*Ph3*gS_gm&? zF1RE;3mbEs_R&eTcVR^P;OHBr>9Xnmjd0%KI{QlYIo8Xkp?*AHzE$HTe%A;N@%NqZ z0BirhNmpRc_j@Kb-X8LUN+2J2{2uj z-rsh9cf$jGJcl3Lz4=dz;stjoPIb}O6|f^zb%mJi!08H8?u_Wb?_gKV?;u!bgdYrY zoe}t8!$ihp-2?u`nchAOM(ueJ^S-n7A@gHn@oas_{Meq7XdgdTbOgn)b)-99;rz-G z&@x43Sq4Q>WdgTE={$o2pS2!ixfnr=DT>)ESz3l*7V%2tlUhQ-R&9QEsG4wmA zvmI!TFx!EzFEs08w`stJZv{TTdxG^3@jSoJqx5X^KKWW`sI?u8NBkhN9iS_O`(c>v0Dpw4 z?O>-{^KG=wXto3FbB-5;b3t18i(Gk8{01JxdZ*T%7ed{zDqj)>P?-0d%o2FbzbZm@@Xu|wsEKAn`IZ9uQs)6cUtNFJ z+Yazio~Sgl9YpcX;ua63cBacJMv&}7!}>$Xg>=aPQo+36U_Uat?xI&4e7`0 z86W5+?LIKSLf_1}%>7!EUZfq0H9Cn52pyt#WHAo|BkF!lK8-Kz-Mz@1$KljX+QAkjobPf`Stl@8-Es0j^cgOZm-cGzMjm#ig9!6Jx|H! z3wtwo0q-GS+TYgLIDJ#P&0Q}_<`Bmv0M&g^Reg}*-vR|-2!ZuwHh`TPx*m^M122PBX1a`{~U424~sE z=Pceg?e-#5K;Q6w#@>8ApW41%XSZ&5d*-1Vpd+MBd(7#9?s34$9A|bF*FC;%>ms@= z@pWhQePogv9?)lAzLI!=;Y+gZpgz9Y`5i>IgRL%ZfmkN&30jX{(eb_mqkYi{HnaG= z-_H8Jjh}yKZOp~{icYhmzi@w7>3sfr4`;U$|Ah@XUB81s9-}|Tf6kZotf${+Kk=myRPp!`|1A+Q1LjpiH9jALI8bl1nU@5wO8 z0qiS+KVmy$Htc!KcECA%(ibAzf%zY3ox#at!`_di_8IM`Jy$lud%ojrec`+xU*A{! zZelD?QrnZ>;q#jn?a^*q_j}ISd}@6?*&_#?fHgU@KQ@9xx9^Pyq2u`dhX-iQdyzeO z8p;6~@S|q^Sc$rT57S1^wYGyz%csUSIvY@<{KNX*XusJQrkR#C?E~jd;(a^mo5|kj zDy;h@`Ff&{vzClaI4c_f?XdO7I9@SN-Df-?lml{IAP%K;f1@jKrCV$EwHfV$Po2;~ zw|OJlZy@t`tMB`eLif+o=NFyc_IGXM>-p4FwGHBY5>-*4tJO2Fbz&WjW-z5G99YZ^uDFl5t z+TZoe)YJxa1AIhG7D=kFmvfn)*!VM)zkveQJAgeWN!1Nbx23gt8}07QVo=hy5(r+ekXkx<>7Y z^MFRWK-%zX#@li^pwVb$`+l(VesC^NJcc)|c^}9@2WE3m8=uYR7u_HKnx}U(-`|z9 z9|B)s*#Phb77uJj6P>2fKlm!T4tpFm!<;w|NYn*XU#D&8Ha~68c|fxfOFwO(^FA`O zbm2JdC+*kQOV3{`?VaV!xh(W;>O`0Ke11uuE13kHC;t7U z-|&E8@(;-6fTU4M_ua*rQYnl1u#xO%a%toJ`O~xY#UUj+$UNScvt3-AXB%g`NJpsg z1x}m(sn6K}B=eXra2zJ_-$`;nUA#cbx=JHl;eE~n;vTV4 z?{eqzC_W}G^WQhI`Hu8@SgpzT`AwV7(B0{i=kwdve5ZfBl*JFetq{( zjNjgAKibW&bw78;Pug}iaMN^u*7JXo;Pcz4jpzu(=c6;2T{4Mp_VSMYqVuT#cQtB9 z(tG0p<|{mC9+1lcNu$)=y9XzWCE=di`xJSVSTt}XD<0s}KDsXP@9as#8W^;XKYy0A z50ow(+~4*YKb_DUeFJW+-tab*w)nEZli`TFuFpYe1SXOdm_#Q{B;4=75crG z7~_)50fs%@-5Jxwd9#-&Ug}9=Jd}aMr%S$QS59t=bb$&v`%`A}jy*eOo7{9S=|}DEk+&4wZ!*(1`XG z1Ml`v>IdyJTKK@5&u{AVAIjIx=T~&hx_&1Z;^Kj&Gi2=xjE*NblsjpgIo zfQ?RfcX$AM60j#k7CfLz`@ue#Ht+YF_JK}6;(hU7z~@(c?36nh5#oX4zQC#TDA5ah z62#+yJ89>z@qkpX_cY<=_|IhYcWWU*Mmso#;Z%+S4qpT^^7&|7xa#<#Ir?5o?{6 z!~;wh=!ORv?Q`BC_>4`A{cikuzn`=ZzGIu~^nBlDIA>|T&o93GqT`NjY>ZIk3mo#@ zwAUyY6Ks_2_yV`Wm^cqeTo*{$#$xbpbkBJ}t5Iv79`b-?Ul-^`4ye+8Fz*}f%O2iW zec$hG*73gZ$fX0E?c(x0+JfPdr49cA@7T3!ju$;6m0FJl9$!4_wknH@}8u~f!8#J;yV)!6!=eVsRB^ZuY{9|-j8j2~y;)V|)mKpkJ;VTuRtq%So*Am3B8 z6VMH9UY`e;E)ZWAK>q!OZ|9HA`-77C4XDu>KN-xW^qu*Qwav5g;fH?hyWQN02gVoJ z*#M+dFmJ+NdzlC0WvMURqiC_4Ha06$!vkV5LrxA5ymC3983czftq~7E7hp~8P1yy} zSI=oLd*;Al(Dx0BfzNMtx<7P;zVouq*Y4Ek*V-7r58`Z~cpG~8Z9Krm4aU|5B3&S5 zUL5Cf@!z>F(94Jx3O)}&7kF0dR4;L+yyiXjxqL+}Xd|Brli}p7T740(?ru%0h zU)tP>uRiPb-TM4C!kMJAfl}vTW&>z)Hc+GXb@SeMfY}85882Y`E?BD$&ShsETl=mp zp3QkcH^b@5oDvThM%t%w7Vn#d>>RA0hw;AhbvrXv+~5F`;y?C9>qk5=Yq-6{19#Hp z8Xgc^8+5vWWRkSU3)zS{z|H$k-r4W`E8yGMuN3dLNV_`eN1k`MAs~ES2VQ5P`!koI z`{VP_&KW=5LMn;}R$QSwuR!1JRL*afpMKaHMys=dy6r)t$T1We`Ta7Ox%OQb*VylLj~KDNBinmu)a~9 z_wi93VC{7<={VXA+Sc*)~27*?c4M4II>!n%trBU5AJRoKh z^w$PyYb$-mXy5Go`Mlo<>ZAK!b~$&(4|v@QUph&TXhpiXJL5;b&#cpD2}$A!e>|jT z1EtyT8XnNdCfE-BYs{P2`SW={%|RQ|x`_A1KHsU_*oqfG|I91M%EUSn^YD0^XZ&;v zDmxqK6~$WNtBdZ@&OF$vFMc}pg*r`7dzWb?ELuj`s@3-oxc;Pul&5ykry)6{cFzn zN#Ex;X$1VUfwHs#Fo#lqzkGp{`s%-n^MH8F5aY~+Ou%{!d(hyIk?Z?D6j#qPc$<~a zFZw08_J$Yl+fT^;Nau-S13>r4+83B}Qv2DrX5XsO1;TX!e6Cr4A@-V!b61FycvkjU z$z)pJCl)>T>1_trQB3Pcyl<~({B#TVGdrf-*+A#Lvw=)^PwQ^>4Rok(+nGhVxEz2@ z5MGF^k3TQZZY@T(0_=u4?PoCx!(Zp?2dD4MVs13uAH6fHc;8mgwRm9gJ!=^U9jaA( z`kfx<0mMc^^ISYXmeYQ}hh*r!Cs}YA89i;=81Ip_AD%4Pmx8?%132Yk)UHZD7})BUA;qkHyx z#!t5}3F3iQ-q}Fi_BW{!Umb`8d@xZP6?x({8?hy~reskWI)f+^nOO5b^u}2S;rdc(5b*79Jn(@``ll107@~pA9rf_~qXoJqWzKZ&w+5cvHT4=&so6@&AVxK)>Dc z1JnKSFLUv}^7(yY`__T3jS~-y4uUR{nGFD6C&7_8%F)A?yho!3f#-H@pLKY4eWv7aku;c`gifZ;w$I0?#Ehl7W@2mG9LYk2M&FK2O1CD30(5Ls}lnF#^dwJ znc18_`cwIW;S0+Ah)jT-WqY+0kj2=K%YRS7_{zh{rBU6ZQY}h4%2OHkh6V={)Z_Z*!rK}a|pyC z!1*oW1GBp30)7zqhRH8f{2=fZg&(l@^COc`I9D@d#G$- zfiJM)fu#dv5%c8eUpfFhu%BlG#m6=OokO5g2>hFDg7*~1H;5115%L2k8{jJnKQLW^ zy=Bl99@&;`JNSv{9ya-nM=6@oivw@u5L;64VQT!=>F5T$W1A9+o*_XWT z90FNF0Df?4^TtxZ4>m5|?db}QZ3og9WIrIT6#YTAh1o3I*lFF^0Ek0$@xY={*6X^_ z0gT?=K3bxAY#zuH*h8G`FZn`it3&Mz+$rqx{Hq%Rq3`(YsV$pM;6Lv318fHmI9uX` zvmc-{U`wFPutAM@VBZ(G9r`Daqj}Lfz75bj^E|eGWPNBJI|yqF@D|%!BR?a1*hW8Z zPg)QNbp>ZTIJJ3PwnU373+}|4rS+{e>(N?g%d>%edPk;5PJrH-=Y&9>)t zJZqiu>veWR?3?&TAVc6Qfvtme4%rr^`)qY~5$q$#K=&0l50(967{?=T)967U;0MDe z`vYm;7g&4tX-*G(8=XuqS~r=VH9{xTi{4r5d`WZsPet$eG&p*feG^*;d+9tZdS}hl z={?ee(1-4oJS0Dhp<4eKJxt4cltZ9%2D&VG45y)(z-LnV6WnmaWyUdAqxRlD=*3v@8l2|1qg_~ z=kRI7Pk}o+yv^^SOz(7f(furb(xcGlybn19atH(vAO_NW7Tg@4>+m^hWcU;uCz!mG*7?MBE4KFto1(^f7UR%^hTL1 z{knL;@VBKm`ij1P6Ilx%O0FPG|DaJfs_DrUDE$W2tn$flnr|=tn#vzbYGGKuVfs?R z^{iF;)kgJ)xOAi58O?Sgl{l0nx02-$2iw*#~t*unbAsJQ6>kSE&;1>RdBypn1Ay*od6@peSd?X6uK<8c4|`F$wl+#%QaTt=lYX@d1mFVz=7F4* zzfuJBp2l?{HEN0bpr)O?ufQGRo_7OLQ~D0(JA4E6l&L z()Br)PGgj!W{#2M{^s>gpNrDUq}yQK$1<+nfhoR_Xz7!msm0Koq-rKo&a zk5%|Nq%Pdx(v=b*xd;C+e>FX*&uZ6QwHB`9?OInpXpfh^q@;o)9hV;KzGJEafby*6 zawFw|KVa&Gu_%2>Pu}nayes%Nd4lG+&tDB15j415DBS4M^$>R7$WSi|H|RC#V>GlN zDCsX??I8dx-Ru5UeT~0)mAFp-KCJtg*ZnKuFf8eP;h{?9>!f?#*Fd`pY{1kFsaRXWwoR;(>>^@n?l#gy@a7rgGfe(Q?>AOM(J>~%j(SJG0@PasNPg2n`J)30MHrb_tx;5x7SVR?1!YBb*0 zxi$rvU00~CaxFslznIr=`&HI6e>Z&)q5B(U{kC5`yT3}<{7U7&@!NitU84T2{Z9DB z%KN-B=4Hvz2Mrg)+)=u9IAq6Tb?L{#Hvuu)uWI=y*$q$l%MFFgV;xpPx!V0|x^-CT z^VRN0@QVPV^rdR|14`rr29O{<=>FBQps}PIK$NcWTdSKIGUk4e?5At|l>kw5bE#H> z*Lok|!n{jg3NnnjB=-*#)}L-`bql*VrpNH_S}+*%VWmL@$1If+00S&t%gdmGV>||b z9~9^;#n!qP^LmP~k2iG2l?poT@ZIGM|50vPG|L?Ay;XfYq-UN$rjNO=FX`)v?F)uHB(H?;`^6LLuPL68 zzSe!+hN`aqaA;lQlG;~WysrLO@jCnnzh~9grMt!%nJHHcKdrfCt00yh7O%3`+VtpG zRKAA3mX2BZd8@xB{fs5s^jIkTFVQPKoQ-}&<=>57>EWU1ho#^2TJ%Z}<+b)}Dg3@y zg!B-)5vAT#DO(Bd<-*$VXITDNrH21i=bs=Qt>;)+f}1`%7W@p*x7#?XX;Rfv)MEW`>A?p{AJeOOKb@B$M(EMCr0gSL zh||YZPU&lPQ;&l0@oek|915o@wb)Bva`n3@<62N$E%FdxK1^2yq12<#L_-qER8(*+ zKvcEJOD~7zRrd$3L6s%F37+_G$<;FRdUeb)gdBlf_O7hwF-s4?M{<O8Ss%^0A=dV@jt{Aw={PD3|Ma(%)L8!y1EhSLP=EuhYe!d#?(D^q~8s zuU9)r558Lt(}V7lYgXxH-GhE#3BD6H+0y5g9zr@yU(%aEIj4N^iw0J%taZ0}B?rp= zSM?MDKxsjGS#Ja504)hx;|hlV^inOhw4gU$deHqS{dTg4fOEOR0{ZTCJZc;b06`_; z2cz_|(!+sw8Nvof>GMiA#3aL#erv=@rzvCM@1S!1pVv#}*K0S%V_|(!dRgiEUX*@S zzpKn3Kqw7ZlpX_s>;78znGbpuL8i8SH5`) zDdi^X5QX)}=Kx2Ubp5-DmIkEY(kVl2Ws=;#7y$GRe5|I&05Bg6r={Nzkk;Cua{XT_ zI6N$HQ{KP==wX09H>PaW^m+gst4%K}Zw&yH9F$*j3G+&?V!#LP*$q8y35K!;0MzBD z#{oe1{q#5hz-ESF%pqCGTh{7j@VB&9chZlA>D1)|U@Vp%2f#5u9p+V5c@F@3BY+zGJk0EaGk$`-IS;G5l^cW&`NWjtS>Vp7tOuqs&uD*_* zL_ehK7RRhGOWD0|oF3Q*8>a^vN|SUqq}Gq9U9pFD(qlzxeyV(ouxpYb&||f4YJb%e WMm)V~@k-SST3asqH5NU&hyNeV`Qf+# literal 0 HcmV?d00001 diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..07772c7 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,60 @@ +import type { Metadata } from "next" +import { ThemeProvider } from "next-themes" +import { Inter } from "next/font/google" +import "./globals.css" + +const inter = Inter({ + subsets: ["latin"], + display: "swap", + variable: "--font-inter", +}) + +import { Sidebar } from "@/components/ui/navigation/sidebar" +import { siteConfig } from "./siteConfig" + +export const metadata: Metadata = { + metadataBase: new URL("https://yoururl.com"), + title: siteConfig.name, + description: siteConfig.description, + keywords: [], + authors: [ + { + name: "yourname", + url: "", + }, + ], + creator: "yourname", + openGraph: { + type: "website", + locale: "en_US", + url: siteConfig.url, + title: siteConfig.name, + description: siteConfig.description, + siteName: siteConfig.name, + }, + icons: { + icon: "/favicon.ico", + }, +} + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + + +