You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2025/03/27 16:28:06 UTC
(airavata) branch cybershuttle-dev updated: Initial research-framework portal
This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch cybershuttle-dev
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/cybershuttle-dev by this push:
new 4f2f07f112 Initial research-framework portal
4f2f07f112 is described below
commit 4f2f07f1120331dd386882769fbf0b57cc0a55dc
Author: Ganning Xu <ga...@gmail.com>
AuthorDate: Thu Mar 27 12:28:01 2025 -0400
Initial research-framework portal
* initial portal w/mock data
* portal ui updates
---
.gitignore | 1 +
portal/.gitignore | 24 +
portal/README.md | 54 +
portal/eslint.config.js | 28 +
portal/index.html | 13 +
portal/package-lock.json | 3936 ++++++++++++++++++++
portal/package.json | 40 +
portal/public/vite.svg | 1 +
portal/src/App.tsx | 41 +
portal/src/assets/airavata-logo.png | Bin 0 -> 14892 bytes
portal/src/assets/react.svg | 1 +
portal/src/components/GridContainer.tsx | 17 +
portal/src/components/Metadata.tsx | 66 +
portal/src/components/NavBar.tsx | 58 +
portal/src/components/PageHeader.tsx | 28 +
portal/src/components/datasets/DatasetCard.tsx | 70 +
portal/src/components/datasets/DatasetDetails.tsx | 54 +
portal/src/components/datasets/index.tsx | 42 +
portal/src/components/home/AddRepositoryButton.tsx | 125 +
portal/src/components/home/AddZipButton.tsx | 113 +
portal/src/components/home/ButtonWithIcon.tsx | 22 +
portal/src/components/home/ProjectCard.tsx | 84 +
portal/src/components/home/ProjectsSection.tsx | 28 +
portal/src/components/home/SessionCard.tsx | 71 +
portal/src/components/home/SessionsSection.tsx | 17 +
portal/src/components/home/index.tsx | 61 +
portal/src/components/models/ModelCard.tsx | 34 +
portal/src/components/models/ModelDetails.tsx | 96 +
portal/src/components/models/index.tsx | 40 +
portal/src/components/notebooks/NotebookCard.tsx | 64 +
portal/src/components/notebooks/ProjectDetails.tsx | 98 +
portal/src/components/notebooks/index.tsx | 55 +
.../src/components/repositories/RepositoryCard.tsx | 39 +
portal/src/components/repositories/index.tsx | 39 +
portal/src/components/ui/color-mode.tsx | 107 +
portal/src/components/ui/input-group.tsx | 53 +
portal/src/components/ui/provider.tsx | 12 +
portal/src/data/MOCK_DATA.js | 555 +++
portal/src/interfaces/AuthorType.tsx | 5 +
portal/src/interfaces/DatasetType.tsx | 7 +
portal/src/interfaces/MetadataType.tsx | 14 +
portal/src/interfaces/ModelType.tsx | 10 +
portal/src/interfaces/ProjectType.tsx | 7 +
portal/src/interfaces/SessionType.tsx | 11 +
portal/src/main.tsx | 12 +
portal/src/vite-env.d.ts | 1 +
portal/tsconfig.app.json | 29 +
portal/tsconfig.json | 7 +
portal/tsconfig.node.json | 24 +
portal/vite.config.ts | 8 +
50 files changed, 6322 insertions(+)
diff --git a/.gitignore b/.gitignore
index a350a1a60e..71baddad9a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,3 +50,4 @@ airavata-local-agent/renderer/.next
airavata-local-agent/dist
logs
+airavata-local-agent/build.sh
diff --git a/portal/.gitignore b/portal/.gitignore
new file mode 100644
index 0000000000..54f07af58b
--- /dev/null
+++ b/portal/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
\ No newline at end of file
diff --git a/portal/README.md b/portal/README.md
new file mode 100644
index 0000000000..40ede56ea6
--- /dev/null
+++ b/portal/README.md
@@ -0,0 +1,54 @@
+# React + TypeScript + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## Expanding the ESLint configuration
+
+If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
+
+```js
+export default tseslint.config({
+ extends: [
+ // Remove ...tseslint.configs.recommended and replace with this
+ ...tseslint.configs.recommendedTypeChecked,
+ // Alternatively, use this for stricter rules
+ ...tseslint.configs.strictTypeChecked,
+ // Optionally, add this for stylistic rules
+ ...tseslint.configs.stylisticTypeChecked,
+ ],
+ languageOptions: {
+ // other options...
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+})
+```
+
+You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
+
+```js
+// eslint.config.js
+import reactX from 'eslint-plugin-react-x'
+import reactDom from 'eslint-plugin-react-dom'
+
+export default tseslint.config({
+ plugins: {
+ // Add the react-x and react-dom plugins
+ 'react-x': reactX,
+ 'react-dom': reactDom,
+ },
+ rules: {
+ // other rules...
+ // Enable its recommended typescript rules
+ ...reactX.configs['recommended-typescript'].rules,
+ ...reactDom.configs.recommended.rules,
+ },
+})
+```
diff --git a/portal/eslint.config.js b/portal/eslint.config.js
new file mode 100644
index 0000000000..092408a9f0
--- /dev/null
+++ b/portal/eslint.config.js
@@ -0,0 +1,28 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ },
+)
diff --git a/portal/index.html b/portal/index.html
new file mode 100644
index 0000000000..e4b78eae12
--- /dev/null
+++ b/portal/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Vite + React + TS</title>
+ </head>
+ <body>
+ <div id="root"></div>
+ <script type="module" src="/src/main.tsx"></script>
+ </body>
+</html>
diff --git a/portal/package-lock.json b/portal/package-lock.json
new file mode 100644
index 0000000000..0ed7f7a5b0
--- /dev/null
+++ b/portal/package-lock.json
@@ -0,0 +1,3936 @@
+{
+ "name": "portal",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "@ark-ui/react": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-4.9.2.tgz",
+ "integrity": "sha512-LJnz8nwXgGRszlkU2AiH3yLsAeXiXeQl4JBjMA7d8klZJBiBUp7URwLhBSWmoAIWRH7bW6fSPjhRAEkJLmD8gA==",
+ "requires": {
+ "@internationalized/date": "3.7.0",
+ "@zag-js/accordion": "0.82.2",
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/auto-resize": "0.82.2",
+ "@zag-js/avatar": "0.82.2",
+ "@zag-js/carousel": "0.82.2",
+ "@zag-js/checkbox": "0.82.2",
+ "@zag-js/clipboard": "0.82.2",
+ "@zag-js/collapsible": "0.82.2",
+ "@zag-js/collection": "0.82.2",
+ "@zag-js/color-picker": "0.82.2",
+ "@zag-js/color-utils": "0.82.2",
+ "@zag-js/combobox": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/date-picker": "0.82.2",
+ "@zag-js/date-utils": "0.82.2",
+ "@zag-js/dialog": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/editable": "0.82.2",
+ "@zag-js/file-upload": "0.82.2",
+ "@zag-js/file-utils": "0.82.2",
+ "@zag-js/focus-trap": "0.82.2",
+ "@zag-js/highlight-word": "0.82.2",
+ "@zag-js/hover-card": "0.82.2",
+ "@zag-js/i18n-utils": "0.82.2",
+ "@zag-js/menu": "0.82.2",
+ "@zag-js/number-input": "0.82.2",
+ "@zag-js/pagination": "0.82.2",
+ "@zag-js/pin-input": "0.82.2",
+ "@zag-js/popover": "0.82.2",
+ "@zag-js/presence": "0.82.2",
+ "@zag-js/progress": "0.82.2",
+ "@zag-js/qr-code": "0.82.2",
+ "@zag-js/radio-group": "0.82.2",
+ "@zag-js/rating-group": "0.82.2",
+ "@zag-js/react": "0.82.2",
+ "@zag-js/select": "0.82.2",
+ "@zag-js/signature-pad": "0.82.2",
+ "@zag-js/slider": "0.82.2",
+ "@zag-js/splitter": "0.82.2",
+ "@zag-js/steps": "0.82.2",
+ "@zag-js/switch": "0.82.2",
+ "@zag-js/tabs": "0.82.2",
+ "@zag-js/tags-input": "0.82.2",
+ "@zag-js/time-picker": "0.82.2",
+ "@zag-js/timer": "0.82.2",
+ "@zag-js/toast": "0.82.2",
+ "@zag-js/toggle-group": "0.82.2",
+ "@zag-js/tooltip": "0.82.2",
+ "@zag-js/tour": "0.82.2",
+ "@zag-js/tree-view": "0.82.2",
+ "@zag-js/types": "0.82.2"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
+ "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
+ "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.10",
+ "@babel/helper-compilation-targets": "^7.26.5",
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helpers": "^7.26.10",
+ "@babel/parser": "^7.26.10",
+ "@babel/template": "^7.26.9",
+ "@babel/traverse": "^7.26.10",
+ "@babel/types": "^7.26.10",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz",
+ "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
+ "requires": {
+ "@babel/parser": "^7.26.10",
+ "@babel/types": "^7.26.10",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.26.5",
+ "@babel/helper-validator-option": "^7.25.9",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "requires": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+ "dev": true
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
+ "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.10"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
+ "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+ "requires": {
+ "@babel/types": "^7.26.10"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-self": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
+ "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
+ "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz",
+ "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
+ "requires": {
+ "regenerator-runtime": "^0.14.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
+ "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz",
+ "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.10",
+ "@babel/parser": "^7.26.10",
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.10",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
+ "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ }
+ },
+ "@chakra-ui/cli": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/cli/-/cli-3.12.0.tgz",
+ "integrity": "sha512-/+gwIt+ZyGkdEwG5NcDSuD/nNKcUJ8axF2/usJD7kvyx2di9slytiw14WT5spieDG2hpPU/p2qIPoFVYkqhSyg==",
+ "dev": true,
+ "requires": {
+ "@clack/prompts": "0.10.0",
+ "@pandacss/is-valid-prop": "0.41.0",
+ "@types/cli-table": "^0.3.4",
+ "@types/debug": "^4.1.12",
+ "@visulima/boxen": "^1.0.23",
+ "bundle-n-require": "1.1.1",
+ "chokidar": "3.6.0",
+ "cli-table": "^0.3.11",
+ "commander": "12.1.0",
+ "debug": "^4.3.5",
+ "globby": "14.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "look-it-up": "2.1.0",
+ "node-fetch": "3.3.2",
+ "package-manager-detector": "0.1.2",
+ "prettier": "3.3.3",
+ "scule": "1.3.0",
+ "sucrase": "^3.35.0",
+ "zod": "^3.23.8"
+ }
+ },
+ "@chakra-ui/icons": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.2.4.tgz",
+ "integrity": "sha512-l5QdBgwrAg3Sc2BRqtNkJpfuLw/pWRDwwT58J6c4PqQT6wzXxyNa8Q0PForu1ltB5qEiFb1kxr/F/HO1EwNa6g=="
+ },
+ "@chakra-ui/react": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.12.0.tgz",
+ "integrity": "sha512-/RsSVyc9FjVuysZnFW3jJ+SIikWo/DfFWICEPis2EBNiCMaQgtjROKthiH4JUX39pXTd45tzJUrRVEN2p0cjNw==",
+ "requires": {
+ "@ark-ui/react": "4.9.2",
+ "@emotion/is-prop-valid": "1.3.1",
+ "@emotion/serialize": "1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "1.2.0",
+ "@emotion/utils": "1.4.2",
+ "@pandacss/is-valid-prop": "0.41.0",
+ "csstype": "3.1.3",
+ "fast-safe-stringify": "2.1.1"
+ }
+ },
+ "@clack/core": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.1.tgz",
+ "integrity": "sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^1.0.0",
+ "sisteransi": "^1.0.5"
+ }
+ },
+ "@clack/prompts": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.0.tgz",
+ "integrity": "sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ==",
+ "dev": true,
+ "requires": {
+ "@clack/core": "0.4.1",
+ "picocolors": "^1.0.0",
+ "sisteransi": "^1.0.5"
+ }
+ },
+ "@emotion/babel-plugin": {
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+ "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.3.3",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ }
+ }
+ },
+ "@emotion/cache": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+ "requires": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="
+ },
+ "@emotion/is-prop-valid": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
+ "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
+ "requires": {
+ "@emotion/memoize": "^0.9.0"
+ }
+ },
+ "@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
+ },
+ "@emotion/react": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
+ "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ }
+ },
+ "@emotion/serialize": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+ "requires": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.10.0",
+ "@emotion/utils": "^1.4.2",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg=="
+ },
+ "@emotion/styled": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
+ "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/is-prop-valid": "^1.3.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2"
+ }
+ },
+ "@emotion/unitless": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="
+ },
+ "@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
+ "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg=="
+ },
+ "@emotion/utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA=="
+ },
+ "@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="
+ },
+ "@esbuild/aix-ppc64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
+ "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
+ "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
+ "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
+ "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
+ "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
+ "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
+ "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
+ "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
+ "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
+ "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
+ "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
+ "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
+ "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
+ "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
+ "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
+ "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
+ "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
+ "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
+ "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
+ "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
+ "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
+ "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
+ "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
+ "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
+ "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
+ "dev": true,
+ "optional": true
+ },
+ "@eslint-community/eslint-utils": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.0.tgz",
+ "integrity": "sha512-RoV8Xs9eNwiDvhv7M+xcL4PWyRyIXRY/FLp3buU4h1EYfdF7unWUy3dOjPqb3C7rMUewIcqwW850PgS8h1o1yg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true
+ }
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true
+ },
+ "@eslint/config-array": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
+ "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
+ "dev": true,
+ "requires": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ }
+ },
+ "@eslint/config-helpers": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz",
+ "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==",
+ "dev": true
+ },
+ "@eslint/core": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
+ "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.15"
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
+ "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true
+ }
+ }
+ },
+ "@eslint/js": {
+ "version": "9.22.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz",
+ "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==",
+ "dev": true
+ },
+ "@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true
+ },
+ "@eslint/plugin-kit": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
+ "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
+ "dev": true,
+ "requires": {
+ "@eslint/core": "^0.12.0",
+ "levn": "^0.4.1"
+ }
+ },
+ "@floating-ui/core": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz",
+ "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
+ "requires": {
+ "@floating-ui/utils": "^0.2.9"
+ }
+ },
+ "@floating-ui/dom": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz",
+ "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
+ "requires": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.9"
+ }
+ },
+ "@floating-ui/utils": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
+ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="
+ },
+ "@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true
+ },
+ "@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "requires": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "dependencies": {
+ "@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true
+ }
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/retry": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+ "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+ "dev": true
+ },
+ "@internationalized/date": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.7.0.tgz",
+ "integrity": "sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==",
+ "requires": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "@internationalized/number": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz",
+ "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==",
+ "requires": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ }
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "requires": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@pandacss/is-valid-prop": {
+ "version": "0.41.0",
+ "resolved": "https://registry.npmjs.org/@pandacss/is-valid-prop/-/is-valid-prop-0.41.0.tgz",
+ "integrity": "sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w=="
+ },
+ "@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz",
+ "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz",
+ "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz",
+ "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz",
+ "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-freebsd-arm64": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz",
+ "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-freebsd-x64": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz",
+ "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz",
+ "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz",
+ "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz",
+ "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz",
+ "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz",
+ "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz",
+ "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz",
+ "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz",
+ "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz",
+ "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
+ "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz",
+ "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz",
+ "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz",
+ "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==",
+ "dev": true,
+ "optional": true
+ },
+ "@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "dev": true
+ },
+ "@swc/helpers": {
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+ "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+ "requires": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "@types/cli-table": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.4.tgz",
+ "integrity": "sha512-GsALrTL69mlwbAw/MHF1IPTadSLZQnsxe7a80G8l4inN/iEXCOcVeT/S7aRc6hbhqzL9qZ314kHPDQnQ3ev+HA==",
+ "dev": true
+ },
+ "@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
+ },
+ "@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "dev": true,
+ "requires": {
+ "@types/ms": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "dev": true
+ },
+ "@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
+ },
+ "@types/react": {
+ "version": "19.0.10",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz",
+ "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==",
+ "dev": true,
+ "requires": {
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/react-dom": {
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz",
+ "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz",
+ "integrity": "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.26.1",
+ "@typescript-eslint/type-utils": "8.26.1",
+ "@typescript-eslint/utils": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.0.1"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz",
+ "integrity": "sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "8.26.1",
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/typescript-estree": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz",
+ "integrity": "sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz",
+ "integrity": "sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "8.26.1",
+ "@typescript-eslint/utils": "8.26.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.0.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.1.tgz",
+ "integrity": "sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz",
+ "integrity": "sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true
+ }
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.1.tgz",
+ "integrity": "sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.26.1",
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/typescript-estree": "8.26.1"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz",
+ "integrity": "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "8.26.1",
+ "eslint-visitor-keys": "^4.2.0"
+ }
+ },
+ "@visulima/boxen": {
+ "version": "1.0.30",
+ "resolved": "https://registry.npmjs.org/@visulima/boxen/-/boxen-1.0.30.tgz",
+ "integrity": "sha512-izo776RvDFeipY7tJspA0wFrcq/Ih0Qhe/zu6v7O4OlURy2ViFmy+2ZSUYTHSSwKrmVeZWrUUJSpaepZPLPMMQ==",
+ "dev": true
+ },
+ "@vitejs/plugin-react": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
+ "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.26.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-source": "^7.25.9",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.14.2"
+ }
+ },
+ "@zag-js/accordion": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-0.82.2.tgz",
+ "integrity": "sha512-w8+oFbSEbW0otT6LG1boO5Iy9UP5K+NalLhoD5XxP/FHS6Rp4R4zk3iolOxxtOh6JXHnghXzG7VZbDQN9R8OWw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/anatomy": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-0.82.2.tgz",
+ "integrity": "sha512-WHGKs5O443T2RSQQvUzYhEV5SNJxO5ysAnHxHdFLWBrMdLjLwLDnvyY7w30kzxeXR9/Z+2yxkgDipxRsC+qC8w=="
+ },
+ "@zag-js/aria-hidden": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-0.82.2.tgz",
+ "integrity": "sha512-V+PjbCABKM4yxFnq9M/t3W1hvwLMVe/0Sj9VyOiAAJDICfSDudGzO+5EfJBTJt59z2Gr4r55X+wtH1uBOtTF7w=="
+ },
+ "@zag-js/auto-resize": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-0.82.2.tgz",
+ "integrity": "sha512-93HhdycOkQMzn4g5MRWRgb5QKk03KwIiTkaU1jhx5eAatT/yYFDvrzNbAXQvr0WePcDNPnPrFS5lAY/85p0eew==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2"
+ }
+ },
+ "@zag-js/avatar": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-0.82.2.tgz",
+ "integrity": "sha512-rGlZno6S9lm/wWLC12sLj7nyFjUXZ/76hOvpcg5d+e2bmysu+chKz1Z08ecLBVVLWkk4JRq9M3v9Jgji0EgaDQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/carousel": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-0.82.2.tgz",
+ "integrity": "sha512-GMbGnoDFwWS8hDUk2unlg3Selmo6JvnTaI5DKEVmwIgp0MGT8zqUk4eAClsLNiS/JunEeK6tyER7K3b4dhYz8Q==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/scroll-snap": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/checkbox": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-0.82.2.tgz",
+ "integrity": "sha512-9gE4P21YsrY+sFJaJOGG84jW64aAxl7M9S+wsmRruKmzNAwri30bOviMV11qZH2isJ44HxPuJ3iezXsLMN+Thg==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/focus-visible": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/clipboard": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-0.82.2.tgz",
+ "integrity": "sha512-FU2SEHP0KthhtYJNtKU98Aw21ugHyX3CT3a75C9wJKGp5gSUDQ6FMIUT3K7GSFR8JGBQ7f/VI8AgE9gNiRpmdg==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/collapsible": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-0.82.2.tgz",
+ "integrity": "sha512-SWOy9ANjO8vbkYwX8AvEOntkPOAXiT9b4Cg3YT5QALPEB2UMUk0CzxJXw+ilbDoRMWWus2nqgx2g6D+IAabjLQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/collection": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-0.82.2.tgz",
+ "integrity": "sha512-moWCnb2F8nfnzYpyLPnCNd10pFSIqrBJrnB4ME0C3QydYIxxwmZsnVLPzTPtnDKGT3uVfL4QX2+nsBoeu1LXrw==",
+ "requires": {
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/color-picker": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-0.82.2.tgz",
+ "integrity": "sha512-BRxnToGNyg1HzkWfQquQM8/xg7Jd8HpJeXWQMT9hIh/XqLiz9HRsGN90I6Avv9vYXYJChw1VdSExdfR2HjlqlA==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/color-utils": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/color-utils": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-0.82.2.tgz",
+ "integrity": "sha512-tBVocNpmWWBPOla0NPj5yMKefg36X176BsvhItlls3/4TB4We8Cad5Wi9G4SGm0ClYaUGPtQUK/E7UEUhfUjxA==",
+ "requires": {
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/combobox": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-0.82.2.tgz",
+ "integrity": "sha512-SVLcfJNqY17MqDL4i3QbxyjEDD/t0xUB37QjgsrKzvnq6IviM6FDh6UfsTX6/NHqy28HL0Aty6NIn2NNM7WyjQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/aria-hidden": "0.82.2",
+ "@zag-js/collection": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/core": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-0.82.2.tgz",
+ "integrity": "sha512-yj4trnU4RzO4duiZJ7uvxECg+6MPVkEbTvTwf2TynotXBYX65LGMTqvMzZP062wvdu0jvTgZ/IbCpN1gc3hmsQ==",
+ "requires": {
+ "@zag-js/store": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/date-picker": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-0.82.2.tgz",
+ "integrity": "sha512-6thJ3ou3u49k4mnnYMecbw0JHvHiaF2nPyToaq/Hsf5grqSijgyZtfkHoDSNFiNN4DKcv1GXErM0N0MiY0dc4A==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/date-utils": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/live-region": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/date-utils": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-0.82.2.tgz",
+ "integrity": "sha512-e2jZ6AFMzwJBNgoOdmATKRH5/Mgr6EqlZmmhI061JzB3uteVOv4x2k5je+g8kWS1IADC5D2OMFQHI/bXSJ5ZFQ=="
+ },
+ "@zag-js/dialog": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-0.82.2.tgz",
+ "integrity": "sha512-p0E6m28HXQMFj+l0MHJcoh326+p/iMocDFOSL1JT3h/U7JLDeW3kNJvpVGK+6vCLngJ/jnAszgQQYhlaz5smJg==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/aria-hidden": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/focus-trap": "0.82.2",
+ "@zag-js/remove-scroll": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/dismissable": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.82.2.tgz",
+ "integrity": "sha512-oi2wLiWEll9vhgFgE4FIH9aWPwId8QExO6kcnfeZPSkytnTRetKlyhj5xsOCygElZK994JRkFP3lpGrGCET+kg==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/interact-outside": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/dom-query": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.82.2.tgz",
+ "integrity": "sha512-4gI1A7Rh9/vZhOuuWzUldP3+2PIiOyR91TBDA0an1VICzHRKBelntlkBR6cZMtjH9gGxhSVxeKN2b060kJ8VQw==",
+ "requires": {
+ "@zag-js/types": "0.82.2"
+ }
+ },
+ "@zag-js/editable": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-0.82.2.tgz",
+ "integrity": "sha512-BHheMo+gRo72GCqc8rowtg8yGg7fg39AdiwIrXUQ4PU2oI+jKkxAKamLXFgu19Ne+1keLcGjNAtVWRZkqszjzw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/interact-outside": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/element-rect": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/element-rect/-/element-rect-0.82.2.tgz",
+ "integrity": "sha512-VdHlu9fLWhKxHFL5vCQXgzqEmxhSBgzTOU0SidR3hsGLcO6dgioz86bJ7i8uPFU+uZDHhyv9Q7lBQQoO76Cr7g=="
+ },
+ "@zag-js/element-size": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.82.2.tgz",
+ "integrity": "sha512-33sCUNJITNAqlNOP+KdMRh8R10s8MPwH+XrxucUBi2R55vWRVs9G3gcA/2uSf1mo/2us74Z4U+/KLnI5FkZycg=="
+ },
+ "@zag-js/file-upload": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-0.82.2.tgz",
+ "integrity": "sha512-r1618x7BkYLh3qaKQOabD838lwM1ARP4aVbzBb5om1cNUjWgy9wCBU1PCNjsqyFzm/bTmHTXgiWdTz06NFpbTg==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/file-utils": "0.82.2",
+ "@zag-js/i18n-utils": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/file-utils": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-0.82.2.tgz",
+ "integrity": "sha512-cjmG+HUBXS+hYsgOfdpNOe/xIYPAQ6CyFDGvuqr4wBnhOd9YyCtn7/M+O4VfodVA9rnVQ67RQsbI/eBBZTQ+/A==",
+ "requires": {
+ "@zag-js/i18n-utils": "0.82.2"
+ }
+ },
+ "@zag-js/focus-trap": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-0.82.2.tgz",
+ "integrity": "sha512-TZNSAqqoml6avv6puO8afMJ0ttfYQC4BvIuA/Z8yjMVPvXHcUUeVyP5mgwp2tadMWY2TJ4Bv0/xxJJvvbwNNXQ==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2"
+ }
+ },
+ "@zag-js/focus-visible": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.82.2.tgz",
+ "integrity": "sha512-fwmNDVHulJ+L6sOFavDhAMYOIZYwo/ivhkPkko2pah6pYYQDwyp4bjsmpofW/VkCgdXgClpcElCC8aoQ83A6Jg==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2"
+ }
+ },
+ "@zag-js/highlight-word": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-0.82.2.tgz",
+ "integrity": "sha512-9sN//8j+TZFTrYIhuSSIJ0rMREVAV8xkJ8250zH///cYfVDuFLCbJp69E613ZfevipemlTQJWP1vTJ1HZGZ5vg=="
+ },
+ "@zag-js/hover-card": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-0.82.2.tgz",
+ "integrity": "sha512-11xb3BzVxMvhSGEx9k/umq4/gt7wbjKB/TVEn2dYTdZ2NTyAa+PLXkZ60VBPnprEZ3Or3AzuWJw68uaSdqxh0A==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/i18n-utils": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-0.82.2.tgz",
+ "integrity": "sha512-ANmNMA7f5Hrhd0ZXVASTV62HRIJut/ioQ6lm/L6PL1+QW+o60j5wJv4HSslQuWWsdyzEpq05u2Sy9ndbcSQ5RA==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2"
+ }
+ },
+ "@zag-js/interact-outside": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.82.2.tgz",
+ "integrity": "sha512-9AB7S6NpOr49oSh+nIl+X8wEiKj2YfXtW2Qk/GOTQ0eP9boXK45Y1pqjWvBpDF0rQYofnWPgoldw9B+rZa+lZQ==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/live-region": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-0.82.2.tgz",
+ "integrity": "sha512-q6j4qggfyUFgpAWBe48cRiaByrJVrOf3x6gHWhK7EsLu45D/0HPkvZjmDgwoRoIISoJVLeT9YquaNsh7rFKFrQ=="
+ },
+ "@zag-js/menu": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-0.82.2.tgz",
+ "integrity": "sha512-vPRLdv9ZcQYgzgtZimXY0LKj7Rs+3EPowc2GEWcMe5ergzhKRlmG/2eRn/mSgESnLmMNx6CaYAYQdNcndd+ksA==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/rect-utils": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/number-input": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-0.82.2.tgz",
+ "integrity": "sha512-gVJZny2MS3ptOpP5W+DGnY7igOCyO9I+Z+dDWlKiLNvHM8v6GlMtxtiPuV8kL1u7TqL8HEGQENA1NZYSr+rcKQ==",
+ "requires": {
+ "@internationalized/number": "3.6.0",
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/pagination": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-0.82.2.tgz",
+ "integrity": "sha512-xPMhYQOb/QoVwQm8TTchameMsrKR6VhZmcCMzjR0KlBIf7WG4Z5H3Rfzw3HXoQaNTipY2k56YH5p4PEirGYvzA==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/pin-input": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-0.82.2.tgz",
+ "integrity": "sha512-8omi7JeA2UXMOeuMdcE2qNk86AfnA19CpY7pQ0GVKuqsxF4zSniC+4SC7uAOUymNtkdv6xVheJF696bRIoChRw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/popover": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-0.82.2.tgz",
+ "integrity": "sha512-OD0hBCasb8gJU97uWE3m8bAL8XqPrIDkQF4mJ0clAC9puusDdKgRS9W5kCQzgzei3JYdZbK81Bnx5X0gOGWKwQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/aria-hidden": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/focus-trap": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/remove-scroll": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/popper": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-0.82.2.tgz",
+ "integrity": "sha512-hrc9WtFge+m8zVgrxFxOPpBRvqf4YhWoJSnhPfjruBSJDrvrgBkozjCsazM3618b7bB+jpw4Pzj0H+lSsv4Ygw==",
+ "requires": {
+ "@floating-ui/dom": "1.6.13",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/presence": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-0.82.2.tgz",
+ "integrity": "sha512-N818BC/PBkdh/yQBECrBONoN9DcYT/PNIblgHic3mG8IIfI49jnAC103gDFbROVJoI/38bk4gwMMOWesZtX/IA==",
+ "requires": {
+ "@zag-js/core": "0.82.2",
+ "@zag-js/types": "0.82.2"
+ }
+ },
+ "@zag-js/progress": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-0.82.2.tgz",
+ "integrity": "sha512-YxQXBHLUXF8BOG68sZCXkthKrZPebt02cSinafpjYXIOwauSBeMdmd8rAjsrAIFWhonaXcqxCs+jqlZRn18tEA==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/qr-code": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-0.82.2.tgz",
+ "integrity": "sha512-dotI3wXTGArwxKnqaLWrgNfXZGq2oe0Ur3KT8JPxHy9Kv6JWYGkge5AmtiGkwXFQR/ZxnRYE1vF1RNjFG50OKQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2",
+ "proxy-memoize": "3.0.1",
+ "uqr": "0.1.2"
+ }
+ },
+ "@zag-js/radio-group": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-0.82.2.tgz",
+ "integrity": "sha512-Peh3zLq8BEmoC9zHrd1n08gLlrlb5VXUpofOdEj9GqtEphLNCf/S3O5jeM6MlYZ9gHe+CkXIpXH16GDBoZVWjw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/element-rect": "0.82.2",
+ "@zag-js/focus-visible": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/rating-group": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-0.82.2.tgz",
+ "integrity": "sha512-J2JX9leShV3HbiFqPoKCITaSshpjjt2U9mNakGU09YUlYEtjKwlNPFpYLSkKw2ItA/T9QbYJC58kbF+bAnTL5w==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/react": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-0.82.2.tgz",
+ "integrity": "sha512-lDul3lRZae2ptkOQSfobl5ZQfX6rhcoN5ILLVbGzBJ9hRtNfMTVfKKxXdF2/pg53sMgggK4hZNR3W2P21uC+Wg==",
+ "requires": {
+ "@zag-js/core": "0.82.2",
+ "@zag-js/store": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "proxy-compare": "3.0.1"
+ }
+ },
+ "@zag-js/rect-utils": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-0.82.2.tgz",
+ "integrity": "sha512-cmjxI+90La4Kz4CeGAN7EJ6wFbPEjZArnvU7TeUA+FrgRQvotjFrzI4zZ20BTgnlgMH7ahVNFO2qsVp+kcc2LQ=="
+ },
+ "@zag-js/remove-scroll": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-0.82.2.tgz",
+ "integrity": "sha512-v6ELaC9+sC+YoAkFjOBabjsXAoQgQA5secFDWWjzSVROWynH1mKNbBxakGCqEKtF67ZGbkAy+ysAZJoOkDsW4g==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2"
+ }
+ },
+ "@zag-js/scroll-snap": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-0.82.2.tgz",
+ "integrity": "sha512-Fl+utIAJr6nwNDnIML2jGIDRiFrDsQS77soGt8rT9Bj5swqdHpzwdTW3yu/VYlnPbvfrsB7SmMt1HzldukdOHQ==",
+ "requires": {
+ "@zag-js/dom-query": "0.82.2"
+ }
+ },
+ "@zag-js/select": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-0.82.2.tgz",
+ "integrity": "sha512-2aiXx/3PKc6vexloHj6GYndAbnPoe5W5mH2VSHM25Obu0XYkn28OLKTDIyHlqcycypVci2j5MnhCEkqQK/JKuw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/collection": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/signature-pad": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-0.82.2.tgz",
+ "integrity": "sha512-o44M7B+cKmmiKmNFEIVTufr59jqvFShLri/EmkS1fY3KMSrnMHWNoa6xbJlVpz4DJMwI8PxapoN+lYxMTYUUEQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2",
+ "perfect-freehand": "^1.2.2"
+ }
+ },
+ "@zag-js/slider": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-0.82.2.tgz",
+ "integrity": "sha512-ef059F+zWcYVjX3lxTDgb2KEcYNrLMrvJEFyaVg11wRLtwjRqVrjFxn9W/ZpR6pWnJol2D+BV8b478NmTpRwog==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/element-size": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/splitter": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-0.82.2.tgz",
+ "integrity": "sha512-36KJkdjtogjG0MTXbcf5b8Ienl02KFoKPPx96uOwlWdvbuypwww6z9kAsWQ+CGkpaKXqxZIweO7BCO4seVCwuQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/steps": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-0.82.2.tgz",
+ "integrity": "sha512-otREJYUKLY+Dku89fCJ5TzkMHxe1Nk4Y5jffyWWOHkf+xy50Ist6jWjGxdIcU2cUwomAJZvPIuz0bq6WjBZ+zg==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/store": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-0.82.2.tgz",
+ "integrity": "sha512-tjG99kSFfnUHWMTe3y+CAqCrH/RGCB2V5y0BoasITYAqTpqbCfPJH0R2+UYsY3kLqPnE+JDkkh1TnwcqKLc0/w==",
+ "requires": {
+ "proxy-compare": "3.0.1"
+ }
+ },
+ "@zag-js/switch": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-0.82.2.tgz",
+ "integrity": "sha512-sUZTcHN1+UxtU7cv+kRaz31OVrNdBqR3BC4bqWkjz/ihshAdzHquwKDkOtYiKjIGV9h8CwcuuCksrbwqCJ3apw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/focus-visible": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/tabs": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-0.82.2.tgz",
+ "integrity": "sha512-8y4eYpu4oZlANehMavGqu4bG5fepgjGuPDZNeNHzwWnbCh1TjoKJ20HvluRRzOgKoErQqD9+WT3V4Khw8Sd62Q==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/element-rect": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/tags-input": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-0.82.2.tgz",
+ "integrity": "sha512-L9bXHImBs+F0nlWbM6TeUZFN3ur/vwGGbT0sFw9FtsL/+5XmTQfZ5wert3l/qeUE1RJrohFBxsVvq4hz6UYUCw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/auto-resize": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/interact-outside": "0.82.2",
+ "@zag-js/live-region": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/time-picker": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/time-picker/-/time-picker-0.82.2.tgz",
+ "integrity": "sha512-NIJUrZMrLH6ciphwsmVsqMGyNEw6qtYlI3F6tlPLhVvnXJDcvc0PaGMe5OBM3yKFluQaVWUIVAR84urdhCBbpg==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/timer": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-0.82.2.tgz",
+ "integrity": "sha512-lpCgHcSL4FNRb+UwlLu/J70iEr0vb2Dybwu39NkzxRi8LuBJGxrXGlTG8Apn2nldf7HHsSLT6cF7Nr0NohQa+Q==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/toast": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-0.82.2.tgz",
+ "integrity": "sha512-jAPzB4hxq90DmsvcuHepqzl/YMTnQQivkA7WG03hq/C5bAoPhpIvLauCTKiVW9SjgGfaTM6wuOQmMQEYiIe/rQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/toggle-group": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-0.82.2.tgz",
+ "integrity": "sha512-aJKP96iwDw/2Z98VWT40ii6CHTSrrvfsGJ03+dE8Mio6a43wiFKhatGLFIMTcu1EExiBmTAec4uUm4A1Xzbu1w==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/tooltip": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-0.82.2.tgz",
+ "integrity": "sha512-s7kXaBR3Ehu7kPzr9xX7FoWlqQ76eEViqGS1RPDtdDVgD1Hg7bfjZ1nCWDKgIuZF7gP/Iq4iC1i5iTOBIdeIOQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/focus-visible": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/tour": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-0.82.2.tgz",
+ "integrity": "sha512-oQyVXSJIw7PeXRnHypI+zKp0mHm8oNiVzgcYBIASk/E9JU0U+DGXh8vRdvzsrQlZD+AKT2rjv1v8xvbVUEngSw==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dismissable": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/focus-trap": "0.82.2",
+ "@zag-js/interact-outside": "0.82.2",
+ "@zag-js/popper": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/tree-view": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-0.82.2.tgz",
+ "integrity": "sha512-7+05aXig4mlISMZ+eKJpi3p+9r9u+h0S5Mvsw2o5Dz7XX/BfPTK8GEEDFWwuJKm03wNBuKCQ8+X1pxUisZqXVQ==",
+ "requires": {
+ "@zag-js/anatomy": "0.82.2",
+ "@zag-js/collection": "0.82.2",
+ "@zag-js/core": "0.82.2",
+ "@zag-js/dom-query": "0.82.2",
+ "@zag-js/types": "0.82.2",
+ "@zag-js/utils": "0.82.2"
+ }
+ },
+ "@zag-js/types": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.82.2.tgz",
+ "integrity": "sha512-OUN4QropdK3XZcjtm4n5JVMhbgp78F3pavLDvWCcwW0QwtckJljX6E17N9ViajVti8itKKXCuNRHCMhqLT8jwQ==",
+ "requires": {
+ "csstype": "3.1.3"
+ }
+ },
+ "@zag-js/utils": {
+ "version": "0.82.2",
+ "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.82.2.tgz",
+ "integrity": "sha512-tN87VEEoo240O2CzQdHvtBVPF8hHqLdpNzDT+obNIQrRj4wbNQ5Ze3Zwrd6/SoBe7ImKgkwbAlgu4k5+v9sDcA=="
+ },
+ "acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "requires": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
+ }
+ },
+ "bundle-n-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/bundle-n-require/-/bundle-n-require-1.1.1.tgz",
+ "integrity": "sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.20.0",
+ "node-eval": "^2.0.0"
+ },
+ "dependencies": {
+ "@esbuild/aix-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+ "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+ "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+ "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+ "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+ "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+ "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+ "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+ "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+ "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+ "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+ "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+ "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+ "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+ "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+ "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+ "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+ "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+ "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+ "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+ "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+ "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
+ "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "dev": true,
+ "requires": {
+ "@esbuild/aix-ppc64": "0.20.2",
+ "@esbuild/android-arm": "0.20.2",
+ "@esbuild/android-arm64": "0.20.2",
+ "@esbuild/android-x64": "0.20.2",
+ "@esbuild/darwin-arm64": "0.20.2",
+ "@esbuild/darwin-x64": "0.20.2",
+ "@esbuild/freebsd-arm64": "0.20.2",
+ "@esbuild/freebsd-x64": "0.20.2",
+ "@esbuild/linux-arm": "0.20.2",
+ "@esbuild/linux-arm64": "0.20.2",
+ "@esbuild/linux-ia32": "0.20.2",
+ "@esbuild/linux-loong64": "0.20.2",
+ "@esbuild/linux-mips64el": "0.20.2",
+ "@esbuild/linux-ppc64": "0.20.2",
+ "@esbuild/linux-riscv64": "0.20.2",
+ "@esbuild/linux-s390x": "0.20.2",
+ "@esbuild/linux-x64": "0.20.2",
+ "@esbuild/netbsd-x64": "0.20.2",
+ "@esbuild/openbsd-x64": "0.20.2",
+ "@esbuild/sunos-x64": "0.20.2",
+ "@esbuild/win32-arm64": "0.20.2",
+ "@esbuild/win32-ia32": "0.20.2",
+ "@esbuild/win32-x64": "0.20.2"
+ }
+ }
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001703",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz",
+ "integrity": "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "cli-table": {
+ "version": "0.3.11",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz",
+ "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
+ "dev": true
+ },
+ "commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="
+ },
+ "cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.5.115",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.115.tgz",
+ "integrity": "sha512-MN1nahVHAQMOz6dz6bNZ7apgqc9InZy7Ja4DBEVCTdeiUcegbyOYE9bi/f2Z/z6ZxLi0RxLpyJ3EGe+4h3w73A==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "esbuild": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
+ "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
+ "dev": true,
+ "requires": {
+ "@esbuild/aix-ppc64": "0.25.1",
+ "@esbuild/android-arm": "0.25.1",
+ "@esbuild/android-arm64": "0.25.1",
+ "@esbuild/android-x64": "0.25.1",
+ "@esbuild/darwin-arm64": "0.25.1",
+ "@esbuild/darwin-x64": "0.25.1",
+ "@esbuild/freebsd-arm64": "0.25.1",
+ "@esbuild/freebsd-x64": "0.25.1",
+ "@esbuild/linux-arm": "0.25.1",
+ "@esbuild/linux-arm64": "0.25.1",
+ "@esbuild/linux-ia32": "0.25.1",
+ "@esbuild/linux-loong64": "0.25.1",
+ "@esbuild/linux-mips64el": "0.25.1",
+ "@esbuild/linux-ppc64": "0.25.1",
+ "@esbuild/linux-riscv64": "0.25.1",
+ "@esbuild/linux-s390x": "0.25.1",
+ "@esbuild/linux-x64": "0.25.1",
+ "@esbuild/netbsd-arm64": "0.25.1",
+ "@esbuild/netbsd-x64": "0.25.1",
+ "@esbuild/openbsd-arm64": "0.25.1",
+ "@esbuild/openbsd-x64": "0.25.1",
+ "@esbuild/sunos-x64": "0.25.1",
+ "@esbuild/win32-arm64": "0.25.1",
+ "@esbuild/win32-ia32": "0.25.1",
+ "@esbuild/win32-x64": "0.25.1"
+ }
+ },
+ "escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "eslint": {
+ "version": "9.22.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz",
+ "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.19.2",
+ "@eslint/config-helpers": "^0.1.0",
+ "@eslint/core": "^0.12.0",
+ "@eslint/eslintrc": "^3.3.0",
+ "@eslint/js": "9.22.0",
+ "@eslint/plugin-kit": "^0.2.7",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true
+ },
+ "eslint-plugin-react-refresh": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz",
+ "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true
+ },
+ "espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ }
+ },
+ "esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
+ "fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "dev": true,
+ "requires": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ }
+ },
+ "file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^4.0.0"
+ }
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ }
+ },
+ "flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true
+ },
+ "foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ }
+ },
+ "formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "dev": true,
+ "requires": {
+ "fetch-blob": "^3.1.2"
+ }
+ },
+ "framer-motion": {
+ "version": "12.5.0",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.5.0.tgz",
+ "integrity": "sha512-buPlioFbH9/W7rDzYh1C09AuZHAk2D1xTA1BlounJ2Rb9aRg84OXexP0GLd+R83v0khURdMX7b5MKnGTaSg5iA==",
+ "requires": {
+ "motion-dom": "^12.5.0",
+ "motion-utils": "^12.5.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "15.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+ "dev": true
+ },
+ "globby": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
+ "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true
+ }
+ }
+ },
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "requires": {
+ "function-bind": "^1.1.2"
+ }
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ }
+ },
+ "ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "requires": {
+ "hasown": "^2.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "requires": {
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="
+ },
+ "json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "look-it-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/look-it-up/-/look-it-up-2.1.0.tgz",
+ "integrity": "sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true
+ },
+ "motion-dom": {
+ "version": "12.5.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.5.0.tgz",
+ "integrity": "sha512-uH2PETDh7m+Hjd1UQQ56yHqwn83SAwNjimNPE/kC+Kds0t4Yh7+29rfo5wezVFpPOv57U4IuWved5d1x0kNhbQ==",
+ "requires": {
+ "motion-utils": "^12.5.0"
+ }
+ },
+ "motion-utils": {
+ "version": "12.5.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.5.0.tgz",
+ "integrity": "sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "nanoid": {
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
+ "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "next-themes": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
+ "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="
+ },
+ "node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "dev": true
+ },
+ "node-eval": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/node-eval/-/node-eval-2.0.0.tgz",
+ "integrity": "sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==",
+ "dev": true,
+ "requires": {
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "dev": true,
+ "requires": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true
+ },
+ "optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "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": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
+ "package-manager-detector": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.1.2.tgz",
+ "integrity": "sha512-iePyefLTOm2gEzbaZKSW+eBMjg+UYsQvUKxmvGXAQ987K16efBg10MxIjZs08iyX+DY2/owKY9DIdu193kX33w==",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "perfect-freehand": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.2.tgz",
+ "integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ=="
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "dev": true
+ },
+ "proxy-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.1.tgz",
+ "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="
+ },
+ "proxy-memoize": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.1.tgz",
+ "integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==",
+ "requires": {
+ "proxy-compare": "^3.0.0"
+ }
+ },
+ "punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "react": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
+ "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ=="
+ },
+ "react-dom": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
+ "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
+ "requires": {
+ "scheduler": "^0.25.0"
+ }
+ },
+ "react-icons": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
+ "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "react-refresh": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
+ "dev": true
+ },
+ "react-router": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.3.0.tgz",
+ "integrity": "sha512-466f2W7HIWaNXTKM5nHTqNxLrHTyXybm7R0eBlVSt0k/u55tTCDO194OIx/NrYD4TS5SXKTNekXfT37kMKUjgw==",
+ "requires": {
+ "@types/cookie": "^0.6.0",
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0",
+ "turbo-stream": "2.4.0"
+ }
+ },
+ "react-tag-input-component": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/react-tag-input-component/-/react-tag-input-component-2.0.2.tgz",
+ "integrity": "sha512-dydI9luVwwv9vrjE5u1TTnkcOVkOVL6mhFti8r6hLi78V2F2EKWQOLptURz79UYbDHLSk6tnbvGl8FE+sMpADg=="
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ },
+ "resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "requires": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true
+ },
+ "rollup": {
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz",
+ "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==",
+ "dev": true,
+ "requires": {
+ "@rollup/rollup-android-arm-eabi": "4.35.0",
+ "@rollup/rollup-android-arm64": "4.35.0",
+ "@rollup/rollup-darwin-arm64": "4.35.0",
+ "@rollup/rollup-darwin-x64": "4.35.0",
+ "@rollup/rollup-freebsd-arm64": "4.35.0",
+ "@rollup/rollup-freebsd-x64": "4.35.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.35.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.35.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.35.0",
+ "@rollup/rollup-linux-arm64-musl": "4.35.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.35.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.35.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.35.0",
+ "@rollup/rollup-linux-x64-gnu": "4.35.0",
+ "@rollup/rollup-linux-x64-musl": "4.35.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.35.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.35.0",
+ "@rollup/rollup-win32-x64-msvc": "4.35.0",
+ "@types/estree": "1.0.6",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "scheduler": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+ "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA=="
+ },
+ "scule": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
+ "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ },
+ "set-cookie-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true
+ },
+ "sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
+ },
+ "source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ }
+ },
+ "string-width-cjs": {
+ "version": "npm:string-width@4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
+ "strip-ansi-cjs": {
+ "version": "npm:strip-ansi@6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ }
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
+ },
+ "sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "requires": {
+ "thenify": ">= 3.1.0 < 4"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "ts-api-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
+ "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
+ "dev": true
+ },
+ "ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true
+ },
+ "tsconfck": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.5.tgz",
+ "integrity": "sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "turbo-stream": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
+ "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g=="
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "typescript": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+ "dev": true
+ },
+ "typescript-eslint": {
+ "version": "8.26.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.1.tgz",
+ "integrity": "sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/eslint-plugin": "8.26.1",
+ "@typescript-eslint/parser": "8.26.1",
+ "@typescript-eslint/utils": "8.26.1"
+ }
+ },
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true
+ },
+ "update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "uqr": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz",
+ "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "vite": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz",
+ "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.25.0",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.5.3",
+ "rollup": "^4.30.1"
+ }
+ },
+ "vite-tsconfig-paths": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz",
+ "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "tsconfck": "^3.0.3"
+ }
+ },
+ "web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true
+ }
+ }
+ },
+ "wrap-ansi-cjs": {
+ "version": "npm:wrap-ansi@7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ },
+ "zod": {
+ "version": "3.24.2",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
+ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/portal/package.json b/portal/package.json
new file mode 100644
index 0000000000..35b0b6300d
--- /dev/null
+++ b/portal/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "portal",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@chakra-ui/icons": "^2.2.4",
+ "@chakra-ui/react": "^3.12.0",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.0",
+ "framer-motion": "^12.5.0",
+ "next-themes": "^0.4.6",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+ "react-icons": "^5.5.0",
+ "react-router": "^7.3.0",
+ "react-tag-input-component": "^2.0.2"
+ },
+ "devDependencies": {
+ "@chakra-ui/cli": "^3.12.0",
+ "@eslint/js": "^9.21.0",
+ "@types/react": "^19.0.10",
+ "@types/react-dom": "^19.0.4",
+ "@vitejs/plugin-react": "^4.3.4",
+ "eslint": "^9.21.0",
+ "eslint-plugin-react-hooks": "^5.1.0",
+ "eslint-plugin-react-refresh": "^0.4.19",
+ "globals": "^15.15.0",
+ "typescript": "~5.7.2",
+ "typescript-eslint": "^8.24.1",
+ "vite": "^6.2.0",
+ "vite-tsconfig-paths": "^5.1.4"
+ }
+}
diff --git a/portal/public/vite.svg b/portal/public/vite.svg
new file mode 100644
index 0000000000..e7b8dfb1b2
--- /dev/null
+++ b/portal/public/vite.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb [...]
\ No newline at end of file
diff --git a/portal/src/App.tsx b/portal/src/App.tsx
new file mode 100644
index 0000000000..a03737144d
--- /dev/null
+++ b/portal/src/App.tsx
@@ -0,0 +1,41 @@
+import { useColorMode } from "./components/ui/color-mode";
+import { BrowserRouter, Route, Routes } from "react-router";
+import Home from "./components/home";
+import ProjectDetails from "./components/notebooks/ProjectDetails";
+import { Models } from "./components/models";
+import { ModelDetails } from "./components/models/ModelDetails";
+import { Datasets } from "./components/datasets";
+import { DatasetDetails } from "./components/datasets/DatasetDetails";
+
+function App() {
+ const colorMode = useColorMode();
+ if (colorMode.colorMode === "dark") {
+ colorMode.toggleColorMode();
+ }
+
+ return (
+ <>
+ <BrowserRouter>
+ <Routes>
+ <Route index element={<Home />} />
+ <Route path="/notebook">
+ <Route path=":slug" element={<ProjectDetails />} />
+ </Route>
+ <Route path="/repository">
+ <Route path=":slug" element={<ProjectDetails />} />
+ </Route>
+ <Route path="/models">
+ <Route index element={<Models />} />
+ <Route path=":id" element={<ModelDetails />} />
+ </Route>
+ <Route path="/datasets">
+ <Route index element={<Datasets />} />
+ <Route path=":slug" element={<DatasetDetails />} />
+ </Route>
+ </Routes>
+ </BrowserRouter>
+ </>
+ );
+}
+
+export default App;
diff --git a/portal/src/assets/airavata-logo.png b/portal/src/assets/airavata-logo.png
new file mode 100644
index 0000000000..06aea97295
Binary files /dev/null and b/portal/src/assets/airavata-logo.png differ
diff --git a/portal/src/assets/react.svg b/portal/src/assets/react.svg
new file mode 100644
index 0000000000..6c87de9bb3
--- /dev/null
+++ b/portal/src/assets/react.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587 [...]
\ No newline at end of file
diff --git a/portal/src/components/GridContainer.tsx b/portal/src/components/GridContainer.tsx
new file mode 100644
index 0000000000..834a6d3b87
--- /dev/null
+++ b/portal/src/components/GridContainer.tsx
@@ -0,0 +1,17 @@
+import { SimpleGrid } from "@chakra-ui/react";
+
+export const GridContainer = ({ children }: { children: React.ReactNode }) => {
+ return (
+ <SimpleGrid
+ columns={{ base: 1, md: 2, lg: 3 }}
+ gap={4}
+ mt={2}
+ maxH="50vh"
+ overflow="scroll"
+ p={4}
+ bg="gray.50"
+ >
+ {children}
+ </SimpleGrid>
+ );
+};
diff --git a/portal/src/components/Metadata.tsx b/portal/src/components/Metadata.tsx
new file mode 100644
index 0000000000..92b12dd7b8
--- /dev/null
+++ b/portal/src/components/Metadata.tsx
@@ -0,0 +1,66 @@
+import { MetadataType } from "@/interfaces/MetadataType";
+import {
+ Image,
+ HStack,
+ Box,
+ Text,
+ Heading,
+ Avatar,
+ Separator,
+ Badge,
+} from "@chakra-ui/react";
+
+export const Metadata = ({ metadata }: { metadata: MetadataType }) => {
+ return (
+ <>
+ <HStack
+ alignItems={"flex-start"}
+ mb={4}
+ gap={8}
+ justifyContent="space-between"
+ >
+ <Box>
+ <Heading as="h1" size="4xl" mb={4}>
+ {metadata.title}
+ </Heading>
+
+ <HStack>
+ <Avatar.Root shape="full" size="xl">
+ <Avatar.Fallback name={metadata.author.name} />
+ <Avatar.Image src={metadata.author.avatar} />
+ </Avatar.Root>
+
+ <Box>
+ <Text fontWeight="bold">{metadata.author.name}</Text>
+ <Text color="gray.500">{metadata.author.role}</Text>
+ </Box>
+ </HStack>
+ </Box>
+
+ <Image
+ src={metadata.images.headerImage}
+ alt="Notebook Header"
+ rounded="md"
+ maxW="300px"
+ />
+ </HStack>
+
+ <Separator my={6} />
+ <Box>
+ <Heading fontWeight="bold" size="2xl">
+ About
+ </Heading>
+
+ <HStack my={2}>
+ {metadata.tags.map((tag) => (
+ <Badge key={tag} size="lg" rounded="md">
+ {tag}
+ </Badge>
+ ))}
+ </HStack>
+
+ <Text>{metadata.description}</Text>
+ </Box>
+ </>
+ );
+};
diff --git a/portal/src/components/NavBar.tsx b/portal/src/components/NavBar.tsx
new file mode 100644
index 0000000000..f62d1ac85a
--- /dev/null
+++ b/portal/src/components/NavBar.tsx
@@ -0,0 +1,58 @@
+import { Text, Flex, Spacer, Image, HStack, Avatar } from "@chakra-ui/react";
+import ApacheAiravataLogo from "../assets/airavata-logo.png";
+import { Link } from "react-router";
+
+const NAV_CONTENT = [
+ {
+ title: "Home",
+ url: "/",
+ },
+ {
+ title: "Datasets",
+ url: "/datasets",
+ },
+ {
+ title: "Models",
+ url: "/models",
+ },
+];
+
+const NavBar = () => {
+ return (
+ <Flex
+ as="nav"
+ align="center"
+ p={4}
+ boxShadow="sm"
+ position="sticky"
+ top="0"
+ zIndex="1000"
+ bg="white" // Ensure background is not transparent
+ >
+ {/* Logo */}
+ <Link to="/">
+ <Image src={ApacheAiravataLogo} alt="Logo" boxSize="30px" />
+ </Link>
+
+ {/* Navigation Links */}
+ <Flex ml={4} gap={6}>
+ {NAV_CONTENT.map((item) => (
+ <Link key={item.title} to={item.url} color="gray.700">
+ {item.title}
+ </Link>
+ ))}
+ </Flex>
+
+ <Spacer />
+
+ {/* Search Bar */}
+ <HStack _hover={{ cursor: "pointer" }}>
+ <Text>John Doe</Text>
+ <Avatar.Root variant="subtle">
+ <Avatar.Fallback name="John Doe" />
+ </Avatar.Root>
+ </HStack>
+ </Flex>
+ );
+};
+export default NavBar;
diff --git a/portal/src/components/PageHeader.tsx b/portal/src/components/PageHeader.tsx
new file mode 100644
index 0000000000..f4e1e8ee85
--- /dev/null
+++ b/portal/src/components/PageHeader.tsx
@@ -0,0 +1,28 @@
+import { Box, HStack, Text, Heading, Icon } from "@chakra-ui/react";
+import { ReactNode } from "react";
+
+export const PageHeader = ({
+ title,
+ icon,
+ description,
+}: {
+ title: string;
+ icon?: ReactNode;
+ description: string;
+}) => {
+ const fontSize = "4xl";
+ return (
+ <Box>
+ <HStack alignItems="center" gap={4}>
+ {icon && <Icon as={icon} fontSize={fontSize} />}
+ <Heading as="h1" size={fontSize}>
+ {title}
+ </Heading>
+ </HStack>
+
+ <Text color="gray.600" mt={2}>
+ {description}
+ </Text>
+ </Box>
+ );
+};
diff --git a/portal/src/components/datasets/DatasetCard.tsx b/portal/src/components/datasets/DatasetCard.tsx
new file mode 100644
index 0000000000..95d3a84ddf
--- /dev/null
+++ b/portal/src/components/datasets/DatasetCard.tsx
@@ -0,0 +1,70 @@
+import { DatasetType } from "@/interfaces/DatasetType";
+import {
+ Text,
+ Box,
+ Card,
+ HStack,
+ Avatar,
+ Image,
+ Badge,
+} from "@chakra-ui/react";
+import { Link } from "react-router";
+
+export const DatasetCard = ({ dataset }: { dataset: DatasetType }) => {
+ return (
+ <Box>
+ <Card.Root overflow="hidden">
+ <Image
+ src={dataset.metadata.images.headerImage}
+ maxH={100}
+ alt="Green double couch with wooden legs"
+ />
+ <Link to={`/datasets/${dataset.metadata.slug}`}>
+ <Card.Body
+ gap="2"
+ _hover={{
+ bg: "gray.100",
+ }}
+ >
+ <HStack justifyContent="space-between" mb={1}>
+ <Card.Title>{dataset.metadata.title}</Card.Title>
+ <Badge
+ colorPalette={dataset.private ? "red" : "green"}
+ rounded="md"
+ >
+ {dataset.private ? "Private" : "Public"}
+ </Badge>
+ </HStack>
+ <HStack flexWrap={"wrap"}>
+ <Badge colorPalette={"purple"} fontWeight="bold" size="md">
+ {dataset.metadata.type}
+ </Badge>
+ {dataset.metadata.tags.map((tag: string) => (
+ <Badge size="md" key={tag}>
+ {tag}
+ </Badge>
+ ))}
+ </HStack>
+ <Text color="fg.muted" lineClamp={2}>
+ {dataset.metadata.description}.
+ </Text>
+ </Card.Body>
+ </Link>
+
+ <Card.Footer justifyContent="space-between">
+ <HStack mt={4}>
+ <Avatar.Root shape="full" size="xl">
+ <Avatar.Fallback name={dataset.metadata.author.name} />
+ <Avatar.Image src={dataset.metadata.author.avatar} />
+ </Avatar.Root>
+
+ <Box>
+ <Text fontWeight="bold">{dataset.metadata.author.name}</Text>
+ <Text color="gray.500">{dataset.metadata.author.role}</Text>
+ </Box>
+ </HStack>
+ </Card.Footer>
+ </Card.Root>
+ </Box>
+ );
+};
diff --git a/portal/src/components/datasets/DatasetDetails.tsx b/portal/src/components/datasets/DatasetDetails.tsx
new file mode 100644
index 0000000000..79719752aa
--- /dev/null
+++ b/portal/src/components/datasets/DatasetDetails.tsx
@@ -0,0 +1,54 @@
+import { Metadata } from "../Metadata";
+import NavBar from "../NavBar";
+// @ts-expect-error This is fine
+import { MOCK_DATASETS } from "../../data/MOCK_DATA";
+import { DatasetType } from "@/interfaces/DatasetType";
+import { useEffect, useState } from "react";
+import { Badge, Box, Container, HStack, Icon, Spinner } from "@chakra-ui/react";
+import { Link, useParams } from "react-router";
+import { BiArrowBack } from "react-icons/bi";
+
+async function getDataset(slug: string | undefined) {
+ return MOCK_DATASETS.find(
+ (dataset: DatasetType) => dataset.metadata.slug === slug
+ );
+}
+
+export const DatasetDetails = () => {
+ const [dataset, setDataset] = useState<DatasetType | null>(null);
+ const { slug } = useParams();
+
+ useEffect(() => {
+ async function getData() {
+ const n = await getDataset(slug);
+ setDataset(n);
+ }
+ getData();
+ }, []);
+
+ if (!dataset) return <Spinner />;
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="breakpoint-lg" mx="auto" p={4} mt={16}>
+ <Box>
+ <HStack alignItems="center" mb={4}>
+ <Icon>
+ <BiArrowBack />
+ </Icon>
+ <Link to="/datasets">Back to Datasets</Link>
+ </HStack>
+ </Box>
+ <Badge
+ colorPalette={dataset.private ? "red" : "green"}
+ rounded="md"
+ mb={1}
+ >
+ {dataset.private ? "Private" : "Public"}
+ </Badge>
+ <Metadata metadata={dataset.metadata} />
+ </Container>
+ </>
+ );
+};
diff --git a/portal/src/components/datasets/index.tsx b/portal/src/components/datasets/index.tsx
new file mode 100644
index 0000000000..82d79d9cb5
--- /dev/null
+++ b/portal/src/components/datasets/index.tsx
@@ -0,0 +1,42 @@
+import NavBar from "../NavBar";
+// @ts-expect-error This is fine
+import { MOCK_DATASETS } from "../../data/MOCK_DATA";
+import { Container, HStack, Input, SimpleGrid } from "@chakra-ui/react";
+import { PageHeader } from "../PageHeader";
+import { LuSearch } from "react-icons/lu";
+import { InputGroup } from "../ui/input-group";
+import { ButtonWithIcon } from "../home/ButtonWithIcon";
+import { FaPlus } from "react-icons/fa";
+import { DatasetCard } from "./DatasetCard";
+import { DatasetType } from "@/interfaces/DatasetType";
+
+export const Datasets = () => {
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="container.lg" p={4}>
+ <HStack alignItems="flex-end" justify="space-between">
+ <PageHeader
+ title="Datasets"
+ description="Public and Private Scientific Datasets."
+ />
+ <ButtonWithIcon colorPalette="purple" icon={FaPlus}>
+ Dataset
+ </ButtonWithIcon>
+ </HStack>
+ <InputGroup mt={4} endElement={<LuSearch />} w="100%">
+ <Input placeholder="Search" rounded="md" />
+ </InputGroup>
+
+ <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={4} mt={4}>
+ {MOCK_DATASETS.map((dataset: DatasetType) => {
+ return (
+ <DatasetCard dataset={dataset} key={dataset.metadata.slug} />
+ );
+ })}
+ </SimpleGrid>
+ </Container>
+ </>
+ );
+};
diff --git a/portal/src/components/home/AddRepositoryButton.tsx b/portal/src/components/home/AddRepositoryButton.tsx
new file mode 100644
index 0000000000..ed5e0dcc2f
--- /dev/null
+++ b/portal/src/components/home/AddRepositoryButton.tsx
@@ -0,0 +1,125 @@
+import {
+ Dialog,
+ Button,
+ Field,
+ Input,
+ CloseButton,
+ Portal,
+ useDialog,
+ Code,
+ VStack,
+ SimpleGrid,
+ Textarea,
+} from "@chakra-ui/react";
+import { FaPlus } from "react-icons/fa";
+import { ButtonWithIcon } from "./ButtonWithIcon";
+import React from "react";
+
+export const AddRepositoryButton = () => {
+ const dialog = useDialog();
+ // useEffect(() => {
+ // dialog.setOpen(true);
+ // }, []);
+ return (
+ <>
+ <Dialog.RootProvider value={dialog} size="lg">
+ <Dialog.Trigger asChild>
+ <ButtonWithIcon
+ bg="cyan.600"
+ _hover={{ bg: "cyan.700" }}
+ icon={FaPlus}
+ >
+ Repository
+ </ButtonWithIcon>
+ </Dialog.Trigger>
+ <Portal>
+ <Dialog.Backdrop />
+ <Dialog.Positioner>
+ <Dialog.Content>
+ <Dialog.Body p="4">
+ <Dialog.Title>Add Git Repository</Dialog.Title>
+ <Dialog.Description mt="2">
+ Start by providing a GitHub URL. If the repository contains a
+ <Code colorPalette="blue">cybershuttle.yml</Code> file, the
+ author/tag/workspace information will be pulled from it. If
+ not, please provide them manually.
+ </Dialog.Description>
+
+ <VStack gap={4} mt="4">
+ <Field.Root>
+ <Field.Label>URL</Field.Label>
+ <Input
+ type="url"
+ flexGrow={1}
+ placeholder="https://github.com/example/repo.git"
+ />
+ </Field.Root>
+ <Field.Root>
+ <Field.Label>Authors</Field.Label>
+ <Input
+ flexGrow={1}
+ placeholder="John Doe <jo...@test.edu>; Jane Doe <ja...@test.edu>"
+ />
+ </Field.Root>
+
+ <Field.Root>
+ <Field.Label>Tags</Field.Label>
+ <Input
+ flexGrow={1}
+ placeholder="bmtk-workshop; neuroscience; notebooks"
+ />
+ </Field.Root>
+ <SimpleGrid columns={5} gap={4}>
+ <Field.Root>
+ <Field.Label>Dir</Field.Label>
+ <Input flexGrow={1} placeholder="/workspace" />
+ </Field.Root>
+ <Field.Root>
+ <Field.Label>Nodes</Field.Label>
+ <Input flexGrow={1} placeholder="1" />
+ </Field.Root>
+
+ <Field.Root>
+ <Field.Label>Min CPU</Field.Label>
+ <Input flexGrow={1} placeholder="1" />
+ </Field.Root>
+ <Field.Root>
+ <Field.Label>Min GPU</Field.Label>
+ <Input flexGrow={1} placeholder="1" />
+ </Field.Root>
+ <Field.Root>
+ <Field.Label>Min RAM</Field.Label>
+ <Input flexGrow={1} placeholder="1" />
+ </Field.Root>
+ </SimpleGrid>
+
+ <Field.Root>
+ <Field.Label>Data</Field.Label>
+ <Textarea
+ flexGrow={1}
+ rows={4}
+ placeholder="cyber://321aed:/workspace/data/A
+allen://8a8b2f:/workspace/data/B
+dropbox://4a34d1:/workspace/data/C"
+ />
+ </Field.Root>
+ <Button
+ bg="cyan.600"
+ _hover={{ bg: "cyan.700" }}
+ width="100%"
+ type="submit"
+ >
+ Add Git Repository
+ </Button>
+ </VStack>
+ </Dialog.Body>
+ <Dialog.CloseTrigger asChild>
+ <CloseButton _hover={{ bg: "gray.100" }} size="sm" />
+ </Dialog.CloseTrigger>
+ </Dialog.Content>
+ </Dialog.Positioner>
+ </Portal>
+ </Dialog.RootProvider>
+ </>
+ );
+};
diff --git a/portal/src/components/home/AddZipButton.tsx b/portal/src/components/home/AddZipButton.tsx
new file mode 100644
index 0000000000..aae98694c0
--- /dev/null
+++ b/portal/src/components/home/AddZipButton.tsx
@@ -0,0 +1,113 @@
+import {
+ Dialog,
+ Button,
+ CloseButton,
+ Portal,
+ useDialog,
+ Code,
+ Box,
+ Icon,
+ FileUpload,
+ Spacer,
+ useFileUpload,
+} from "@chakra-ui/react";
+import { FaPlus } from "react-icons/fa";
+import { ButtonWithIcon } from "./ButtonWithIcon";
+import { LuUpload } from "react-icons/lu";
+
+export const AddZipButton = () => {
+ const dialog = useDialog();
+ // useEffect(() => {
+ // dialog.setOpen(true);
+ // }, []);
+ const fileUpload = useFileUpload({
+ maxFiles: 1,
+ accept: ".zip",
+ });
+
+ return (
+ <>
+ <Dialog.RootProvider
+ value={dialog}
+ size="lg"
+ onExitComplete={() => {
+ fileUpload.clearFiles(); // Clear files when modal closes
+ }}
+ >
+ <Dialog.Trigger asChild>
+ <ButtonWithIcon
+ bg="pink.500"
+ _hover={{ bg: "pink.600" }}
+ icon={FaPlus}
+ >
+ Zip
+ </ButtonWithIcon>
+ </Dialog.Trigger>
+ <Portal>
+ <Dialog.Backdrop />
+ <Dialog.Positioner>
+ <Dialog.Content>
+ <Dialog.Body p="4">
+ <Dialog.Title>Add Zip File</Dialog.Title>
+ <Dialog.Description mt="2">
+ Upload a ZIP file containing your repository. If the
+ repository contains a{" "}
+ <Code colorPalette="blue">cybershuttle.yml</Code> file, the
+ author/tag/workspace information will be pulled from it. If
+ not, please provide them manually.
+ </Dialog.Description>
+ <FileUpload.RootProvider
+ alignItems="stretch"
+ mt={4}
+ value={fileUpload}
+ >
+ <FileUpload.HiddenInput />
+ {fileUpload.acceptedFiles.length === 0 && (
+ <FileUpload.Dropzone>
+ <Icon size="md" color="fg.muted">
+ <LuUpload />
+ </Icon>
+ <FileUpload.DropzoneContent>
+ <Box>Drag and drop your .zip file here</Box>
+ </FileUpload.DropzoneContent>
+ </FileUpload.Dropzone>
+ )}
+
+ <FileUpload.ItemGroup>
+ <FileUpload.Context>
+ {({ acceptedFiles }) =>
+ acceptedFiles.map((file) => (
+ <FileUpload.Item key={file.name} file={file}>
+ <FileUpload.ItemPreview />
+ <FileUpload.ItemName />
+ <FileUpload.ItemSizeText />
+ <Spacer />
+ <FileUpload.ItemDeleteTrigger />
+ </FileUpload.Item>
+ ))
+ }
+ </FileUpload.Context>
+ </FileUpload.ItemGroup>
+ </FileUpload.RootProvider>
+
+ <Button
+ bg="pink.500"
+ _hover={{ bg: "pink.600" }}
+ width="100%"
+ type="submit"
+ mt={4}
+ disabled={fileUpload.acceptedFiles.length === 0}
+ >
+ Add Zip File
+ </Button>
+ </Dialog.Body>
+ <Dialog.CloseTrigger asChild>
+ <CloseButton _hover={{ bg: "gray.100" }} size="sm" />
+ </Dialog.CloseTrigger>
+ </Dialog.Content>
+ </Dialog.Positioner>
+ </Portal>
+ </Dialog.RootProvider>
+ </>
+ );
+};
diff --git a/portal/src/components/home/ButtonWithIcon.tsx b/portal/src/components/home/ButtonWithIcon.tsx
new file mode 100644
index 0000000000..c970dcb185
--- /dev/null
+++ b/portal/src/components/home/ButtonWithIcon.tsx
@@ -0,0 +1,22 @@
+import { Button, ButtonProps, Icon } from "@chakra-ui/react";
+import { IconType } from "react-icons";
+
+interface ButtonWithIconProps extends ButtonProps {
+ icon: IconType;
+ children: React.ReactNode;
+}
+
+export const ButtonWithIcon = ({
+ icon: UserIcon,
+ children,
+ ...rest
+}: ButtonWithIconProps) => {
+ return (
+ <Button {...rest}>
+ <Icon size="xs">
+ <UserIcon fontWeight="solid" />
+ </Icon>
+ {children}
+ </Button>
+ );
+};
diff --git a/portal/src/components/home/ProjectCard.tsx b/portal/src/components/home/ProjectCard.tsx
new file mode 100644
index 0000000000..05173203c2
--- /dev/null
+++ b/portal/src/components/home/ProjectCard.tsx
@@ -0,0 +1,84 @@
+import { ProjectType } from "@/interfaces/ProjectType";
+import {
+ Text,
+ Box,
+ Card,
+ HStack,
+ Avatar,
+ Button,
+ Icon,
+ Image,
+ Badge,
+} from "@chakra-ui/react";
+import { FaPlay } from "react-icons/fa";
+import { Link } from "react-router";
+
+export const ProjectCard = ({ project }: { project: ProjectType }) => {
+ return (
+ <Box>
+ <Card.Root overflow="hidden">
+ <Image
+ src={project.metadata.images.headerImage}
+ maxH={100}
+ alt="Green double couch with wooden legs"
+ />
+ <Link to={`/${project.metadata.type}/${project.metadata.slug}`}>
+ <Card.Body
+ gap="2"
+ _hover={{
+ bg: "gray.100",
+ }}
+ >
+ <Card.Title>{project.metadata.title}</Card.Title>
+ <HStack flexWrap={"wrap"}>
+ <Badge
+ colorPalette={
+ project.metadata.type === "notebook" ? "cyan" : "pink"
+ }
+ fontWeight="bold"
+ size="md"
+ >
+ {project.metadata.type}
+ </Badge>
+ {project.metadata.tags.map((tag: string) => (
+ <Badge size="md" key={tag}>
+ {tag}
+ </Badge>
+ ))}
+ </HStack>
+ <Text color="fg.muted" lineClamp={2}>
+ {project.metadata.description}.
+ </Text>
+ </Card.Body>
+ </Link>
+
+ <Card.Footer justifyContent="space-between">
+ <HStack mt={4}>
+ <Avatar.Root shape="full" size="xl">
+ <Avatar.Fallback name={project.metadata.author.name} />
+ <Avatar.Image src={project.metadata.author.avatar} />
+ </Avatar.Root>
+
+ <Box>
+ <Text fontWeight="bold">{project.metadata.author.name}</Text>
+ <Text color="gray.500">{project.metadata.author.role}</Text>
+ </Box>
+ </HStack>
+
+ <Button
+ bg={project.metadata.type === "notebook" ? "cyan.500" : "pink.500"}
+ _hover={{
+ bg:
+ project.metadata.type === "notebook" ? "cyan.600" : "pink.600",
+ }}
+ >
+ Run
+ <Icon ml={1} size={"sm"}>
+ <FaPlay />
+ </Icon>
+ </Button>
+ </Card.Footer>
+ </Card.Root>
+ </Box>
+ );
+};
diff --git a/portal/src/components/home/ProjectsSection.tsx b/portal/src/components/home/ProjectsSection.tsx
new file mode 100644
index 0000000000..836621dbd8
--- /dev/null
+++ b/portal/src/components/home/ProjectsSection.tsx
@@ -0,0 +1,28 @@
+import { ProjectType } from "@/interfaces/ProjectType";
+import { Input } from "@chakra-ui/react";
+import { LuSearch } from "react-icons/lu";
+// @ts-expect-error This is fine
+import { MOCK_PROJECTS } from "../../data/MOCK_DATA";
+import { ProjectCard } from "./ProjectCard";
+import { InputGroup } from "../ui/input-group";
+import { GridContainer } from "../GridContainer";
+
+export const ProjectsSection = () => {
+ // shuffle projects
+ // const shuffledProjects = MOCK_PROJECTS.sort(() => 0.5 - Math.random());
+
+ const projects = MOCK_PROJECTS;
+ return (
+ <>
+ <InputGroup mt={2} endElement={<LuSearch />} w="100%">
+ <Input placeholder="Search" rounded="md" />
+ </InputGroup>
+
+ <GridContainer>
+ {projects.map((project: ProjectType) => {
+ return <ProjectCard key={project.metadata.slug} project={project} />;
+ })}
+ </GridContainer>
+ </>
+ );
+};
diff --git a/portal/src/components/home/SessionCard.tsx b/portal/src/components/home/SessionCard.tsx
new file mode 100644
index 0000000000..a6bf2ee4be
--- /dev/null
+++ b/portal/src/components/home/SessionCard.tsx
@@ -0,0 +1,71 @@
+import { SessionType } from "@/interfaces/SessionType";
+import {
+ Box,
+ Text,
+ Card,
+ Heading,
+ HStack,
+ SimpleGrid,
+ Badge,
+} from "@chakra-ui/react";
+
+const getColorPalette = (status: string) => {
+ switch (status) {
+ case "running":
+ return "green";
+ case "stopped":
+ return "red";
+ case "pending":
+ return "yellow";
+ default:
+ return "gray";
+ }
+};
+export const SessionCard = ({ session }: { session: SessionType }) => {
+ return (
+ <Card.Root
+ size="sm"
+ bg={
+ session.title.toLocaleLowerCase() === "jupyter"
+ ? "green.50"
+ : "purple.50"
+ }
+ >
+ <Card.Header>
+ <HStack justify="space-between" alignItems="flex-start">
+ <Box>
+ <Heading size="lg">{session.title}</Heading>
+ <Text color="fg.muted">{session.started}</Text>
+ </Box>
+ <Badge size="md" colorPalette={getColorPalette(session.status)}>
+ {session.status}
+ </Badge>
+ </HStack>
+ </Card.Header>
+ <Card.Body>
+ <SimpleGrid columns={2}>
+ <KeyValue label="Models" value={session.models.join(", ")} />
+ <KeyValue label="Datasets" value={session.datasets.join(", ")} />
+ <KeyValue label="Nodes" value={session.nodes.toString()} />
+ <KeyValue label="RAM" value={session.ram.toString()} />
+ <KeyValue label="Storage" value={session.storage.toString()} />
+ </SimpleGrid>
+ </Card.Body>
+ </Card.Root>
+ );
+};
+
+export const KeyValue = ({
+ label,
+ value,
+}: {
+ label: string;
+ value: string;
+}) => {
+ return (
+ <HStack>
+ <Text fontWeight="bold">{label}:</Text>
+ <Text>{value}</Text>
+ </HStack>
+ );
+};
diff --git a/portal/src/components/home/SessionsSection.tsx b/portal/src/components/home/SessionsSection.tsx
new file mode 100644
index 0000000000..d3dd2eeea4
--- /dev/null
+++ b/portal/src/components/home/SessionsSection.tsx
@@ -0,0 +1,17 @@
+// @ts-expect-error This is fine
+import { MOCK_SESSIONS } from "../../data/MOCK_DATA";
+import { SessionType } from "@/interfaces/SessionType";
+import { SessionCard } from "./SessionCard";
+import { GridContainer } from "../GridContainer";
+
+export const SessionsSection = () => {
+ return (
+ <>
+ <GridContainer>
+ {MOCK_SESSIONS.map((session: SessionType) => {
+ return <SessionCard key={session.sessionId} session={session} />;
+ })}
+ </GridContainer>
+ </>
+ );
+};
diff --git a/portal/src/components/home/index.tsx b/portal/src/components/home/index.tsx
new file mode 100644
index 0000000000..6a96f64e5e
--- /dev/null
+++ b/portal/src/components/home/index.tsx
@@ -0,0 +1,61 @@
+import { Box, HStack, Container } from "@chakra-ui/react";
+
+import NavBar from "../NavBar";
+import { PageHeader } from "../PageHeader";
+import { AddRepositoryButton } from "./AddRepositoryButton";
+import { AddZipButton } from "./AddZipButton";
+import { ProjectsSection } from "./ProjectsSection";
+import { ButtonWithIcon } from "./ButtonWithIcon";
+import { FaPlus } from "react-icons/fa";
+import { SessionsSection } from "./SessionsSection";
+
+const Home = () => {
+ return (
+ <Box>
+ <NavBar />
+
+ <Container maxW="container.xl" p={4}>
+ <HStack alignItems="flex-end" justify="space-between">
+ <PageHeader
+ title="Notebooks"
+ description="Community-Published Scientific Notebooks and Repositories."
+ />
+
+ <HStack gap={4}>
+ <AddZipButton />
+ <AddRepositoryButton />
+ </HStack>
+ </HStack>
+
+ <ProjectsSection />
+
+ <HStack alignItems="flex-end" justify="space-between" mt={4}>
+ <PageHeader
+ title="Sessions"
+ description="Stop or attach to past sessions. Each session preserves your code and data."
+ />
+
+ <HStack gap={4}>
+ <ButtonWithIcon
+ bg="purple.500"
+ _hover={{ bg: "purple.600" }}
+ icon={FaPlus}
+ >
+ VSCode
+ </ButtonWithIcon>
+ <ButtonWithIcon
+ bg="green.600"
+ _hover={{ bg: "green.700" }}
+ icon={FaPlus}
+ >
+ Jupyter
+ </ButtonWithIcon>
+ </HStack>
+ </HStack>
+ <SessionsSection />
+ </Container>
+ </Box>
+ );
+};
+
+export default Home;
diff --git a/portal/src/components/models/ModelCard.tsx b/portal/src/components/models/ModelCard.tsx
new file mode 100644
index 0000000000..9fd0898e54
--- /dev/null
+++ b/portal/src/components/models/ModelCard.tsx
@@ -0,0 +1,34 @@
+import { Badge, Box, Card, HStack, Heading } from "@chakra-ui/react";
+import { ModelType } from "@/interfaces/ModelType";
+import { Link } from "react-router";
+export const ModelCard = ({ model }: { model: ModelType }) => {
+ return (
+ <Box>
+ <Card.Root
+ size="sm"
+ _hover={{
+ bg: "gray.100",
+ cursor: "pointer",
+ }}
+ >
+ <Link to={`/models/${model.appModuleId}`}>
+ <Card.Header>
+ <HStack
+ justifyContent="space-between"
+ alignItems="flex-start"
+ flexWrap="wrap"
+ >
+ <Heading size="md"> {model.appModuleName}</Heading>
+ {model.appModuleVersion && (
+ <Badge size="md" colorPalette="green">
+ {model.appModuleVersion}
+ </Badge>
+ )}
+ </HStack>
+ </Card.Header>
+ <Card.Body color="fg.muted">{model.appModuleDescription}</Card.Body>
+ </Link>
+ </Card.Root>
+ </Box>
+ );
+};
diff --git a/portal/src/components/models/ModelDetails.tsx b/portal/src/components/models/ModelDetails.tsx
new file mode 100644
index 0000000000..db3eff60ff
--- /dev/null
+++ b/portal/src/components/models/ModelDetails.tsx
@@ -0,0 +1,96 @@
+import { useParams } from "react-router";
+import NavBar from "../NavBar";
+// @ts-expect-error This is fine
+import { MOCK_MODELS } from "../../data/MOCK_DATA";
+import { ModelType } from "@/interfaces/ModelType";
+import { useState, useEffect } from "react";
+import {
+ Badge,
+ Button,
+ Code,
+ Container,
+ HStack,
+ Heading,
+ Text,
+} from "@chakra-ui/react";
+
+async function getModel(id: string | undefined) {
+ return MOCK_MODELS.find((model: ModelType) => model.appModuleId === id);
+}
+
+export const ModelDetails = () => {
+ const { id } = useParams();
+ const [model, setModel] = useState<ModelType | null>(null);
+ const [copyClicked, setCopyClicked] = useState(false);
+
+ useEffect(() => {
+ if (!id) return;
+
+ async function getData() {
+ const n = await getModel(id);
+ setModel(n);
+ }
+ getData();
+ }, [id]);
+
+ if (!model) return null;
+
+ const templateCode = `exp = md.AlphaFold2.initialize(
+ name=...,
+ input_seq=...,
+ max_template_date=...,
+ model_preset=...,
+ multimers_per_model=...,
+)
+exp.create_task()
+exp.plan().launch()`;
+
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="breakpoint-md" p={4}>
+ <HStack
+ alignItems="center"
+ mt={4}
+ justifyContent="space-between"
+ flexWrap="wrap"
+ >
+ <Heading size="4xl">{model.appModuleName}</Heading>
+ {model.appModuleVersion && (
+ <Badge size="md" colorPalette="green">
+ {model.appModuleVersion}
+ </Badge>
+ )}
+ </HStack>
+ <Text color="fg.muted" mt={2}>
+ {model.appModuleDescription}
+ </Text>
+
+ <Heading size="2xl" mt={4}>
+ Example
+ <Button
+ size="xs"
+ ml={2}
+ colorPalette="teal"
+ onClick={() => {
+ navigator.clipboard.writeText(templateCode);
+ setCopyClicked(true);
+ setTimeout(() => setCopyClicked(false), 2000);
+ }}
+ >
+ {copyClicked ? "Copied!" : "Copy"}
+ </Button>
+ </Heading>
+
+ <Code
+ mt={2}
+ p={2}
+ display="block"
+ whiteSpace="pre"
+ children={templateCode}
+ />
+ </Container>
+ </>
+ );
+};
diff --git a/portal/src/components/models/index.tsx b/portal/src/components/models/index.tsx
new file mode 100644
index 0000000000..12679290e8
--- /dev/null
+++ b/portal/src/components/models/index.tsx
@@ -0,0 +1,40 @@
+import NavBar from "../NavBar";
+// @ts-expect-error This is fine
+import { MOCK_MODELS } from "../../data/MOCK_DATA";
+import { Container, HStack, Input, SimpleGrid } from "@chakra-ui/react";
+import { PageHeader } from "../PageHeader";
+import { ModelCard } from "./ModelCard";
+import { ModelType } from "@/interfaces/ModelType";
+import { LuSearch } from "react-icons/lu";
+import { InputGroup } from "../ui/input-group";
+import { ButtonWithIcon } from "../home/ButtonWithIcon";
+import { FaPlus } from "react-icons/fa";
+
+export const Models = () => {
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="container.lg" p={4}>
+ <HStack alignItems="flex-end" justify="space-between">
+ <PageHeader
+ title="Models"
+ description="Public and Private Scientific models that can be run with varying inputs."
+ />
+ <ButtonWithIcon colorPalette="teal" icon={FaPlus}>
+ Model
+ </ButtonWithIcon>
+ </HStack>
+ <InputGroup mt={4} endElement={<LuSearch />} w="100%">
+ <Input placeholder="Search" rounded="md" />
+ </InputGroup>
+
+ <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={4} mt={4}>
+ {MOCK_MODELS.map((model: ModelType) => {
+ return <ModelCard model={model} key={model.appModuleId} />;
+ })}
+ </SimpleGrid>
+ </Container>
+ </>
+ );
+};
diff --git a/portal/src/components/notebooks/NotebookCard.tsx b/portal/src/components/notebooks/NotebookCard.tsx
new file mode 100644
index 0000000000..d2bda42287
--- /dev/null
+++ b/portal/src/components/notebooks/NotebookCard.tsx
@@ -0,0 +1,64 @@
+import {
+ Box,
+ Image,
+ Icon,
+ Text,
+ Card,
+ HStack,
+ Avatar,
+ Button,
+} from "@chakra-ui/react";
+import { FaPlay } from "react-icons/fa";
+import { Link } from "react-router";
+
+export const NotebookCard = ({ notebook }: { notebook: any }) => {
+ return (
+ <Box>
+ <Card.Root overflow="hidden">
+ <Image
+ src={notebook.images.headerImage}
+ alt="Green double couch with wooden legs"
+ />
+ <Link to={notebook.slug}>
+ <Card.Body
+ gap="2"
+ _hover={{
+ bg: "gray.100",
+ }}
+ >
+ <Card.Title>{notebook.title}</Card.Title>
+ <HStack>
+ {notebook.tags.map((tag: string) => (
+ <Text key={tag} bg="gray.200" p={1} rounded="md">
+ {tag}
+ </Text>
+ ))}
+ </HStack>
+ <Card.Description>{notebook.description}.</Card.Description>
+ </Card.Body>
+ </Link>
+
+ <Card.Footer justifyContent="space-between">
+ <HStack mt={4}>
+ <Avatar.Root shape="full" size="xl">
+ <Avatar.Fallback name={notebook.author.name} />
+ <Avatar.Image src={notebook.author.avatar} />
+ </Avatar.Root>
+
+ <Box>
+ <Text fontWeight="bold">{notebook.author.name}</Text>
+ <Text color="gray.500">{notebook.author.role}</Text>
+ </Box>
+ </HStack>
+
+ <Button>
+ Run
+ <Icon ml={1} size={"sm"}>
+ <FaPlay />
+ </Icon>
+ </Button>
+ </Card.Footer>
+ </Card.Root>
+ </Box>
+ );
+};
diff --git a/portal/src/components/notebooks/ProjectDetails.tsx b/portal/src/components/notebooks/ProjectDetails.tsx
new file mode 100644
index 0000000000..2cf9590076
--- /dev/null
+++ b/portal/src/components/notebooks/ProjectDetails.tsx
@@ -0,0 +1,98 @@
+import { Link, useParams } from "react-router";
+import NavBar from "../NavBar";
+import {
+ Container,
+ Spinner,
+ HStack,
+ Box,
+ Separator,
+ Button,
+ Icon,
+ Link as ChakraLink,
+} from "@chakra-ui/react";
+// @ts-expect-error This is fine
+import { MOCK_PROJECTS } from "../../data/MOCK_DATA";
+import { useEffect, useState } from "react";
+import { BiArrowBack } from "react-icons/bi";
+import { ProjectType } from "@/interfaces/ProjectType";
+import { Metadata } from "../Metadata";
+
+async function getProject(slug: string | undefined) {
+ return MOCK_PROJECTS.find(
+ (project: ProjectType) => project.metadata.slug === slug
+ );
+}
+
+const ProjectDetails = () => {
+ const { slug } = useParams();
+ const [project, setProject] = useState<ProjectType | null>(null);
+
+ useEffect(() => {
+ if (!slug) return;
+
+ async function getData() {
+ const n = await getProject(slug);
+ setProject(n);
+ }
+ getData();
+ }, [slug]);
+
+ if (!project) return <Spinner />;
+
+ const isNotebook = project?.notebookViewer !== undefined;
+
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="breakpoint-lg" mx="auto" p={4} mt={16}>
+ <Box>
+ <HStack alignItems="center" mb={4}>
+ <Icon>
+ <BiArrowBack />
+ </Icon>
+ <Link to="/">Back to Projects</Link>
+ </HStack>
+ </Box>
+ <Metadata metadata={project.metadata} />
+
+ <Separator my={8} />
+
+ <Button colorPalette="teal" mb={4} w="full">
+ <ChakraLink
+ target="_blank"
+ href={project?.notebookViewer || project?.repositoryUrl}
+ color="white"
+ fontWeight="bold"
+ display="block"
+ width="100%"
+ textAlign="center"
+ >
+ Open
+ </ChakraLink>
+ </Button>
+
+ <Box border="2px solid black">
+ <Box height="600px" borderRadius="md" overflow="hidden">
+ {isNotebook ? (
+ <iframe
+ title="notebook"
+ src={project?.notebookViewer}
+ width="100%"
+ height="100%"
+ />
+ ) : (
+ <iframe
+ width="100%"
+ height="100%"
+ src={`https://emgithub.com/iframe.html?target=${project.repositoryUrl}%2Fblob%2Fmaster%2FREADME.md&style=default&type=markdown&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on`}
+ ></iframe>
+ )}
+ </Box>
+ </Box>
+ </Container>
+ </>
+ );
+};
+
+export default ProjectDetails;
diff --git a/portal/src/components/notebooks/index.tsx b/portal/src/components/notebooks/index.tsx
new file mode 100644
index 0000000000..7fa14096d3
--- /dev/null
+++ b/portal/src/components/notebooks/index.tsx
@@ -0,0 +1,55 @@
+import { Box, Container, HStack, Input, SimpleGrid } from "@chakra-ui/react";
+import NavBar from "../NavBar";
+import { PageHeader } from "../PageHeader";
+import { FaCode } from "react-icons/fa";
+import { MOCK_NOTEBOOKS } from "../../data/MOCK_DATA";
+import { NotebookCard } from "./NotebookCard";
+import { InputGroup } from "../ui/input-group";
+import { LuSearch } from "react-icons/lu";
+import { TagsInput } from "react-tag-input-component";
+import { useState } from "react";
+
+const Notebooks = () => {
+ const [tags, setTags] = useState<string[]>([]);
+ let filteredNotebooks = MOCK_NOTEBOOKS;
+ if (tags) {
+ filteredNotebooks = MOCK_NOTEBOOKS.filter((notebook) => {
+ return tags.every((tag) => notebook.tags.includes(tag));
+ });
+ }
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="container.lg" mt={8}>
+ <PageHeader
+ title="Notebooks"
+ icon={<FaCode />}
+ description="Create and manage your notebooks. From here, you can create new notebooks, view existing ones, and manage them."
+ />
+ <InputGroup endElement={<LuSearch />} w="100%" mt={16}>
+ <Input placeholder="Search" rounded="md" />
+ </InputGroup>
+ <Box mt={4}>
+ <TagsInput
+ value={tags}
+ onChange={setTags}
+ placeHolder="Filter by tags"
+ />
+ </Box>
+ <SimpleGrid
+ columns={{ base: 1, md: 2, lg: 3 }}
+ mt={4}
+ gap={12}
+ justifyContent="space-around"
+ >
+ {filteredNotebooks.map((notebook: any) => {
+ return <NotebookCard key={notebook.slug} notebook={notebook} />;
+ })}
+ </SimpleGrid>
+ </Container>
+ </>
+ );
+};
+
+export default Notebooks;
diff --git a/portal/src/components/repositories/RepositoryCard.tsx b/portal/src/components/repositories/RepositoryCard.tsx
new file mode 100644
index 0000000000..5d5f2ba8e4
--- /dev/null
+++ b/portal/src/components/repositories/RepositoryCard.tsx
@@ -0,0 +1,39 @@
+import {
+ Card,
+ Heading,
+ Box,
+ Text,
+ Link as ChakraLink,
+ HStack,
+} from "@chakra-ui/react";
+export const RepositoryCard = ({ repository }) => {
+ return (
+ <Card.Root width="100%">
+ <Card.Header>
+ <HStack justifyContent="space-between" alignItems="flex-start">
+ <Box>
+ <Heading size="md">{repository.title}</Heading>
+ <Text color="gray.500" mt={2}>
+ {repository.date}
+ </Text>
+ </Box>
+
+ <Text>
+ <ChakraLink
+ href={repository.githubUrl}
+ target="_blank"
+ bg="black"
+ color="white"
+ p={2}
+ rounded="md"
+ fontWeight="bold"
+ >
+ View on GitHub
+ </ChakraLink>
+ </Text>
+ </HStack>
+ </Card.Header>
+ <Card.Body color="fg.muted">{repository.description}</Card.Body>
+ </Card.Root>
+ );
+};
diff --git a/portal/src/components/repositories/index.tsx b/portal/src/components/repositories/index.tsx
new file mode 100644
index 0000000000..4b1e1ebf2d
--- /dev/null
+++ b/portal/src/components/repositories/index.tsx
@@ -0,0 +1,39 @@
+import { Container, VStack } from "@chakra-ui/react";
+import NavBar from "../NavBar";
+import { BsGithub } from "react-icons/bs";
+import { PageHeader } from "../PageHeader";
+import { MOCK_REPOSITORIES } from "../../data/MOCK_DATA";
+import { RepositoryCard } from "./RepositoryCard";
+
+const Repositories = () => {
+ return (
+ <>
+ <NavBar />
+
+ <Container maxW="container.lg" mt={8}>
+ <PageHeader
+ title="Repositories"
+ icon={<BsGithub />}
+ description="View the most viewed repositories on GitHub, all central to this page."
+ />
+
+ <VStack gap={4} mt={8}>
+ {
+ // This is the code that will be replaced by the code snippet
+ // from the instructions
+ MOCK_REPOSITORIES.map((repository) => {
+ return (
+ <RepositoryCard
+ repository={repository}
+ key={repository.githubUrl}
+ />
+ );
+ })
+ }
+ </VStack>
+ </Container>
+ </>
+ );
+};
+
+export default Repositories;
diff --git a/portal/src/components/ui/color-mode.tsx b/portal/src/components/ui/color-mode.tsx
new file mode 100644
index 0000000000..f93feabca9
--- /dev/null
+++ b/portal/src/components/ui/color-mode.tsx
@@ -0,0 +1,107 @@
+"use client"
+
+import type { IconButtonProps, SpanProps } from "@chakra-ui/react"
+import { ClientOnly, IconButton, Skeleton, Span } from "@chakra-ui/react"
+import { ThemeProvider, useTheme } from "next-themes"
+import type { ThemeProviderProps } from "next-themes"
+import * as React from "react"
+import { LuMoon, LuSun } from "react-icons/lu"
+
+export interface ColorModeProviderProps extends ThemeProviderProps {}
+
+export function ColorModeProvider(props: ColorModeProviderProps) {
+ return (
+ <ThemeProvider attribute="class" disableTransitionOnChange {...props} />
+ )
+}
+
+export type ColorMode = "light" | "dark"
+
+export interface UseColorModeReturn {
+ colorMode: ColorMode
+ setColorMode: (colorMode: ColorMode) => void
+ toggleColorMode: () => void
+}
+
+export function useColorMode(): UseColorModeReturn {
+ const { resolvedTheme, setTheme } = useTheme()
+ const toggleColorMode = () => {
+ setTheme(resolvedTheme === "dark" ? "light" : "dark")
+ }
+ return {
+ colorMode: resolvedTheme as ColorMode,
+ setColorMode: setTheme,
+ toggleColorMode,
+ }
+}
+
+export function useColorModeValue<T>(light: T, dark: T) {
+ const { colorMode } = useColorMode()
+ return colorMode === "dark" ? dark : light
+}
+
+export function ColorModeIcon() {
+ const { colorMode } = useColorMode()
+ return colorMode === "dark" ? <LuMoon /> : <LuSun />
+}
+
+interface ColorModeButtonProps extends Omit<IconButtonProps, "aria-label"> {}
+
+export const ColorModeButton = React.forwardRef<
+ HTMLButtonElement,
+ ColorModeButtonProps
+>(function ColorModeButton(props, ref) {
+ const { toggleColorMode } = useColorMode()
+ return (
+ <ClientOnly fallback={<Skeleton boxSize="8" />}>
+ <IconButton
+ onClick={toggleColorMode}
+ variant="ghost"
+ aria-label="Toggle color mode"
+ size="sm"
+ ref={ref}
+ {...props}
+ css={{
+ _icon: {
+ width: "5",
+ height: "5",
+ },
+ }}
+ >
+ <ColorModeIcon />
+ </IconButton>
+ </ClientOnly>
+ )
+})
+
+export const LightMode = React.forwardRef<HTMLSpanElement, SpanProps>(
+ function LightMode(props, ref) {
+ return (
+ <Span
+ color="fg"
+ display="contents"
+ className="chakra-theme light"
+ colorPalette="gray"
+ colorScheme="light"
+ ref={ref}
+ {...props}
+ />
+ )
+ },
+)
+
+export const DarkMode = React.forwardRef<HTMLSpanElement, SpanProps>(
+ function DarkMode(props, ref) {
+ return (
+ <Span
+ color="fg"
+ display="contents"
+ className="chakra-theme dark"
+ colorPalette="gray"
+ colorScheme="dark"
+ ref={ref}
+ {...props}
+ />
+ )
+ },
+)
diff --git a/portal/src/components/ui/input-group.tsx b/portal/src/components/ui/input-group.tsx
new file mode 100644
index 0000000000..5d8fb32ad2
--- /dev/null
+++ b/portal/src/components/ui/input-group.tsx
@@ -0,0 +1,53 @@
+import type { BoxProps, InputElementProps } from "@chakra-ui/react"
+import { Group, InputElement } from "@chakra-ui/react"
+import * as React from "react"
+
+export interface InputGroupProps extends BoxProps {
+ startElementProps?: InputElementProps
+ endElementProps?: InputElementProps
+ startElement?: React.ReactNode
+ endElement?: React.ReactNode
+ children: React.ReactElement<InputElementProps>
+ startOffset?: InputElementProps["paddingStart"]
+ endOffset?: InputElementProps["paddingEnd"]
+}
+
+export const InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(
+ function InputGroup(props, ref) {
+ const {
+ startElement,
+ startElementProps,
+ endElement,
+ endElementProps,
+ children,
+ startOffset = "6px",
+ endOffset = "6px",
+ ...rest
+ } = props
+
+ const child =
+ React.Children.only<React.ReactElement<InputElementProps>>(children)
+
+ return (
+ <Group ref={ref} {...rest}>
+ {startElement && (
+ <InputElement pointerEvents="none" {...startElementProps}>
+ {startElement}
+ </InputElement>
+ )}
+ {React.cloneElement(child, {
+ ...(startElement && {
+ ps: `calc(var(--input-height) - ${startOffset})`,
+ }),
+ ...(endElement && { pe: `calc(var(--input-height) - ${endOffset})` }),
+ ...children.props,
+ })}
+ {endElement && (
+ <InputElement placement="end" {...endElementProps}>
+ {endElement}
+ </InputElement>
+ )}
+ </Group>
+ )
+ },
+)
diff --git a/portal/src/components/ui/provider.tsx b/portal/src/components/ui/provider.tsx
new file mode 100644
index 0000000000..c1f896c87b
--- /dev/null
+++ b/portal/src/components/ui/provider.tsx
@@ -0,0 +1,12 @@
+"use client";
+
+import { ChakraProvider, defaultSystem } from "@chakra-ui/react";
+import { ColorModeProvider, type ColorModeProviderProps } from "./color-mode";
+
+export function Provider(props: ColorModeProviderProps) {
+ return (
+ <ChakraProvider value={defaultSystem}>
+ <ColorModeProvider {...props} />
+ </ChakraProvider>
+ );
+}
diff --git a/portal/src/data/MOCK_DATA.js b/portal/src/data/MOCK_DATA.js
new file mode 100644
index 0000000000..774b31c38b
--- /dev/null
+++ b/portal/src/data/MOCK_DATA.js
@@ -0,0 +1,555 @@
+export const MOCK_PROJECTS = [
+ {
+ "metadata": {
+ "type": "notebook",
+ "title": "A new framework for molecular sciences",
+ "slug": "a-new-framework-for-molecular-sciences",
+ "description": "This study presents a new framework for molecular sciences that can be used to study the molecular structure of molecules and their interactions with other molecules. The framework is based on the concept of molecular structure and is designed to be used in conjunction with other molecular sciences tools.",
+ "author": {
+ "name": "Dr. John Doe",
+ "avatar": "https://media.istockphoto.com/id/1356638196/photo/teenage-student-using-the-microscope-in-the-laboratory.jpg?s=612x612&w=0&k=20&c=v4ZITw5Wm3QmlcNRssQjShgE5l61E9TW62kK3k-G3jY=",
+ "role": "contributor"
+ },
+ "tags": ["science", "molecular", "framework"],
+ "date": "2021-01-01",
+ "images": {
+ "headerImage": "https://scitechdaily.com/images/Artistic-Molecular-Structure.jpg"
+ },
+ },
+ "notebookViewer": "https://jupyter.org/try-jupyter/lab/"
+ },
+ {
+ "metadata": {
+ "type": "notebook",
+ "title": "The role of machine learning in molecular sciences",
+ "slug": "the-role-of-machine-learning-in-molecular-sciences",
+ "description": "This study presents the role of machine learning in molecular sciences and how it can be used to study the molecular structure of molecules and their interactions with other molecules. The study is based on the concept of molecular structure and is designed to be used in conjunction with other molecular sciences tools.",
+ "author": {
+ "name": "Dr. Jane Doe",
+ "avatar": "https://media.istockphoto.com/id/1356638196/photo/teenage-student-using-the-microscope-in-the-laboratory.jpg?s=612x612&w=0&k=20&c=v4ZITw5Wm3QmlcNRssQjShgE5l61E9TW62kK3k-G3jY=",
+ "role": "contributor"
+ },
+ "tags": ["science", "molecular", "machine learning"],
+ "date": "2021-01-02",
+ "images": {
+ "headerImage": "https://scitechdaily.com/images/Artistic-Molecular-Structure.jpg"
+ },
+ },
+ "notebookViewer": "https://jupyter.org/try-jupyter/lab/"
+ },
+ {
+ "metadata": {
+ "type": "notebook",
+ "title": "The future of molecular sciences",
+ "slug": "the-future-of-molecular-sciences",
+ "description": "This study presents the future of molecular sciences and how it can be used to study the molecular structure of molecules and their interactions with other molecules. The study is based on the concept of molecular structure and is designed to be used in conjunction with other molecular sciences tools.",
+ "author": {
+ "name": "Dr. James Doe",
+ "avatar": "https://media.istockphoto.com/id/1356638196/photo/teenage-student-using-the-microscope-in-the-laboratory.jpg?s=612x612&w=0&k=20&c=v4ZITw5Wm3QmlcNRssQjShgE5l61E9TW62kK3k-G3jY=",
+ "role": "contributor"
+ },
+ "tags": ["science", "molecular", "future"],
+ "date": "2021-01-03",
+ "images": {
+ "headerImage": "https://scitechdaily.com/images/Artistic-Molecular-Structure.jpg"
+ },
+ },
+ "notebookViewer": "https://jupyter.org/try-jupyter/lab/"
+ },
+ {
+ "metadata": {
+ "type": "repository",
+ "title": "Apache Airavata Repository",
+ "slug": "apache-airavata-repository",
+ "description": "Apache Airavata is a software framework for executing and managing computational workflows on distributed computing resources including local clusters, supercomputers, national grids, academic and commercial clouds.",
+ "author": {
+ "name": "Apache Software Foundation",
+ "avatar": "https://avatars.githubusercontent.com/u/47359?v=4",
+ "role": "contributor"
+ },
+ "tags": ["apache", "airavata", "repository"],
+ "date": "2021-01-01",
+ "images": {
+ "headerImage": "https://www.gatech.edu/sites/default/files/styles/hero_16_9_extra_extra_large_1800x1013_/public/2022-04/Tech-tower-wreck.jpg?h=fb7e085a&itok=MGAERbjU"
+ },
+ },
+ "repositoryUrl": "https://github.com/apache/airavata"
+ },
+ {
+ "metadata": {
+ "type": "repository",
+ "title": "TensorFlow Repository",
+ "slug": "tensorflow-repository",
+ "description": "TensorFlow is an end-to-end open-source platform for machine learning, providing a comprehensive, flexible ecosystem of tools, libraries, and community resources.",
+ "author": {
+ "name": "Google",
+ "avatar": "https://avatars.githubusercontent.com/u/1342004?v=4",
+ "role": "contributor"
+ },
+ "tags": ["tensorflow", "machine learning", "repository"],
+ "date": "2022-05-15",
+ "images": {
+ "headerImage": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKis9ECId8eIwn_p0SVMBt3a1vfvKOcOZXy6zK0fWoyzXnzQTguKc2CV__6oI1Pwg22NjWsErpDKqjwQdzjilvmqwWkXPj2ncglphh6mAhpoZ_QXQiDwxnwo-GjKEP0fEOb3uBlNlh9sc/s1600/tensorflow2objectdetection.png"
+ },
+ },
+ "repositoryUrl": "https://github.com/tensorflow/tensorflow",
+ },
+ {
+ "metadata": {
+ "type": "repository",
+ "title": "PyTorch Repository",
+ "slug": "pytorch-repository",
+ "description": "PyTorch is an open-source machine learning framework that accelerates the path from research prototyping to production deployment.",
+ "author": {
+ "name": "Facebook",
+ "avatar": "https://avatars.githubusercontent.com/u/69631?v=4",
+ "role": "contributor"
+ },
+ "tags": ["pytorch", "machine learning", "repository"],
+ "date": "2023-03-10",
+ "images": {
+ "headerImage": "https://pytorch.org/assets/images/community-events-recap/fg1.jpg"
+ },
+ },
+ "repositoryUrl": "https://github.com/pytorch/pytorch"
+ }
+];
+
+export const MOCK_DATASETS = [
+ {
+ "metadata": {
+ "type": "dataset",
+ "title": "Dataset A",
+ "slug": "dataset-a",
+ "description": "Dataset A is the best dataset for machine learning projects. It contains a wide variety of data points and features that can be used to train and test machine learning models.",
+ "author": {
+ "name": "Facebook",
+ "avatar": "https://avatars.githubusercontent.com/u/69631?v=4",
+ "role": "contributor"
+ },
+ "tags": ["pytorch", "machine learning", "repository"],
+ "date": "2023-03-10",
+ "images": {
+ "headerImage": "https://pytorch.org/assets/images/community-events-recap/fg1.jpg"
+ },
+ },
+ "datasetUrl": "https://www.kaggle.com/datasets/muhammadtahir194/movies-dataset-tmdb-top-rated",
+ "private": true,
+ },
+ {
+ "metadata": {
+ "type": "dataset",
+ "title": "Dataset B",
+ "slug": "dataset-b",
+ "description": "Dataset B is the best dataset for machine learning projects. It contains a wide variety of data points and features that can be used to train and test machine learning models.",
+ "author": {
+ "name": "Facebook",
+ "avatar": "https://avatars.githubusercontent.com/u/69631?v=4",
+ "role": "contributor"
+ },
+ "tags": ["pytorch", "machine learning", "repository"],
+ "date": "2023-03-10",
+ "images": {
+ "headerImage": "https://pytorch.org/assets/images/community-events-recap/fg1.jpg"
+ },
+ },
+ "datasetUrl": "https://www.kaggle.com/datasets/muhammadtahir194/movies-dataset-tmdb-top-rated",
+ "private": false,
+ },
+ {
+ "metadata": {
+ "type": "dataset",
+ "title": "Dataset C",
+ "slug": "dataset-c",
+ "description": "Dataset C is the best dataset for machine learning projects. It contains a wide variety of data points and features that can be used to train and test machine learning models.",
+ "author": {
+ "name": "Facebook",
+ "avatar": "https://avatars.githubusercontent.com/u/69631?v=4",
+ "role": "contributor"
+ },
+ "tags": ["pytorch", "machine learning", "repository"],
+ "date": "2023-03-10",
+ "images": {
+ "headerImage": "https://pytorch.org/assets/images/community-events-recap/fg1.jpg"
+ },
+ },
+ "datasetUrl": "https://www.kaggle.com/datasets/muhammadtahir194/movies-dataset-tmdb-top-rated",
+ "private": true,
+ },
+];
+
+export const MOCK_SESSIONS = [
+ {
+ "sessionId": "1",
+ "title": "Jupyter",
+ "started": "4 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "running"
+ },
+ {
+ "sessionId": "2",
+ "title": "Jupyter",
+ "started": "2 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "running"
+ },
+ {
+ "sessionId": "3",
+ "title": "VSCode",
+ "started": "1 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "stopped"
+ },
+ {
+ "sessionId": "4",
+ "title": "Jupyter",
+ "started": "1 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "stopped"
+ },
+ {
+ "sessionId": "5",
+ "title": "VSCode",
+ "started": "1 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "stopped"
+ },
+ {
+ "sessionId": "6",
+ "title": "VSCode",
+ "started": "1 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "stopped"
+ },
+ {
+ "sessionId": "7",
+ "title": "Jupyter",
+ "started": "1 hours ago",
+ "models": ["v1", "v2"],
+ "datasets": ["A", "B", "C"],
+ "nodes": 1,
+ "ram": "8GB",
+ "storage": "40GB",
+ "status": "running"
+ },
+];
+
+
+
+
+export const MOCK_NOTEBOOKS = [
+ {
+ "type": "notebook",
+ "title": "A new framework for molecular sciences",
+ "slug": "a-new-framework-for-molecular-sciences",
+ "description": "This study presents a new framework for molecular sciences that can be used to study the molecular structure of molecules and their interactions with other molecules. The framework is based on the concept of molecular structure and is designed to be used in conjunction with other molecular sciences tools.",
+ "author": {
+ "name": "Dr. John Doe",
+ "avatar": "https://media.istockphoto.com/id/1356638196/photo/teenage-student-using-the-microscope-in-the-laboratory.jpg?s=612x612&w=0&k=20&c=v4ZITw5Wm3QmlcNRssQjShgE5l61E9TW62kK3k-G3jY=",
+ "role": "contributor"
+ },
+ "tags": ["science", "molecular", "framework"],
+ "date": "2021-01-01",
+ "images": {
+ "headerImage": "https://scitechdaily.com/images/Artistic-Molecular-Structure.jpg"
+ },
+ "notebookViewer": "https://jupyter.org/try-jupyter/lab/"
+ },
+ {
+ "type": "notebook",
+ "title": "The role of machine learning in molecular sciences",
+ "slug": "the-role-of-machine-learning-in-molecular-sciences",
+ "description": "This study presents the role of machine learning in molecular sciences and how it can be used to study the molecular structure of molecules and their interactions with other molecules. The study is based on the concept of molecular structure and is designed to be used in conjunction with other molecular sciences tools.",
+ "author": {
+ "name": "Dr. Jane Doe",
+ "avatar": "https://media.istockphoto.com/id/1356638196/photo/teenage-student-using-the-microscope-in-the-laboratory.jpg?s=612x612&w=0&k=20&c=v4ZITw5Wm3QmlcNRssQjShgE5l61E9TW62kK3k-G3jY=",
+ "role": "contributor"
+ },
+ "tags": ["science", "molecular", "machine learning"],
+ "date": "2021-01-02",
+ "images": {
+ "headerImage": "https://scitechdaily.com/images/Artistic-Molecular-Structure.jpg"
+ },
+ "notebookViewer": "https://jupyter.org/try-jupyter/lab/"
+ },
+ {
+ "type": "notebook",
+ "title": "The future of molecular sciences",
+ "slug": "the-future-of-molecular-sciences",
+ "description": "This study presents the future of molecular sciences and how it can be used to study the molecular structure of molecules and their interactions with other molecules. The study is based on the concept of molecular structure and is designed to be used in conjunction with other molecular sciences tools.",
+ "author": {
+ "name": "Dr. James Doe",
+ "avatar": "https://media.istockphoto.com/id/1356638196/photo/teenage-student-using-the-microscope-in-the-laboratory.jpg?s=612x612&w=0&k=20&c=v4ZITw5Wm3QmlcNRssQjShgE5l61E9TW62kK3k-G3jY=",
+ "role": "contributor"
+ },
+ "tags": ["science", "molecular", "future"],
+ "date": "2021-01-03",
+ "images": {
+ "headerImage": "https://scitechdaily.com/images/Artistic-Molecular-Structure.jpg"
+ },
+ "notebookViewer": "https://jupyter.org/try-jupyter/lab/"
+ },
+ {
+ "type": "repository",
+ "title": "Apache Airavata Repository",
+ "slug": "apache-airavata-repository",
+ "description": "Apache Airavata is a software framework for executing and managing computational workflows on distributed computing resources including local clusters, supercomputers, national grids, academic and commercial clouds.",
+ "author": {
+ "name": "Apache Software Foundation",
+ "avatar": "https://avatars.githubusercontent.com/u/47359?v=4",
+ "role": "contributor"
+ },
+ "tags": ["apache", "airavata", "repository"],
+ "date": "2021-01-01",
+ "images": {
+ "headerImage": "https://www.gatech.edu/sites/default/files/styles/hero_16_9_extra_extra_large_1800x1013_/public/2022-04/Tech-tower-wreck.jpg?h=fb7e085a&itok=MGAERbjU"
+ },
+ "repositoryUrl": "https://github.com/apache/airavata"
+ },
+ {
+ "type": "repository",
+ "title": "TensorFlow Repository",
+ "slug": "tensorflow-repository",
+ "description": "TensorFlow is an end-to-end open-source platform for machine learning, providing a comprehensive, flexible ecosystem of tools, libraries, and community resources.",
+ "author": {
+ "name": "Google",
+ "avatar": "https://avatars.githubusercontent.com/u/1342004?v=4",
+ "role": "contributor"
+ },
+ "tags": ["tensorflow", "machine learning", "repository"],
+ "date": "2022-05-15",
+ "images": {
+ "headerImage": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKis9ECId8eIwn_p0SVMBt3a1vfvKOcOZXy6zK0fWoyzXnzQTguKc2CV__6oI1Pwg22NjWsErpDKqjwQdzjilvmqwWkXPj2ncglphh6mAhpoZ_QXQiDwxnwo-GjKEP0fEOb3uBlNlh9sc/s1600/tensorflow2objectdetection.png"
+ },
+ "repositoryUrl": "https://github.com/tensorflow/tensorflow",
+ },
+ {
+ "type": "repository",
+ "title": "PyTorch Repository",
+ "slug": "pytorch-repository",
+ "description": "PyTorch is an open-source machine learning framework that accelerates the path from research prototyping to production deployment.",
+ "author": {
+ "name": "Facebook",
+ "avatar": "https://avatars.githubusercontent.com/u/69631?v=4",
+ "role": "contributor"
+ },
+ "tags": ["pytorch", "machine learning", "repository"],
+ "date": "2023-03-10",
+ "images": {
+ "headerImage": "https://pytorch.org/assets/images/community-events-recap/fg1.jpg"
+ },
+ "repositoryUrl": "https://github.com/pytorch/pytorch"
+ }
+];
+
+
+export const MOCK_REPOSITORIES = [
+ {
+ "githubUrl": "https://github.com/apache/airavata",
+ "title": "Apache Airavata Dataset",
+ "description": "Apache Airavata is a software framework for executing and managing computational workflows on distributed computing resources including local clusters, supercomputers, national grids, academic and commercial clouds.",
+ "date": "2021-01-01",
+ },
+ {
+ "githubUrl": "https://github.com/tensorflow/tensorflow",
+ "title": "TensorFlow",
+ "description": "TensorFlow is an end-to-end open-source platform for machine learning, providing a comprehensive, flexible ecosystem of tools, libraries, and community resources.",
+ "date": "2022-05-15",
+ },
+ {
+ "githubUrl": "https://github.com/pytorch/pytorch",
+ "title": "PyTorch",
+ "description": "PyTorch is an open-source machine learning framework that accelerates the path from research prototyping to production deployment.",
+ "date": "2023-03-10",
+ },
+ {
+ "githubUrl": "https://github.com/apache/spark",
+ "title": "Apache Spark",
+ "description": "Apache Spark is a unified analytics engine for large-scale data processing, with built-in modules for SQL, streaming, machine learning, and graph processing.",
+ "date": "2020-11-20",
+ },
+ {
+ "githubUrl": "https://github.com/microsoft/vscode",
+ "title": "Visual Studio Code",
+ "description": "Visual Studio Code is a lightweight but powerful source code editor that runs on your desktop and is available for Windows, macOS, and Linux.",
+ "date": "2021-09-30",
+ },
+ {
+ "githubUrl": "https://github.com/nodejs/node",
+ "title": "Node.js",
+ "description": "Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine, designed for building scalable network applications.",
+ "date": "2022-07-18",
+ },
+ {
+ "githubUrl": "https://github.com/facebook/react",
+ "title": "React",
+ "description": "React is a declarative, efficient, and flexible JavaScript library for building user interfaces, maintained by Facebook.",
+ "date": "2023-01-05",
+ },
+ {
+ "githubUrl": "https://github.com/django/django",
+ "title": "Django",
+ "description": "Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design.",
+ "date": "2021-12-10",
+ },
+ {
+ "githubUrl": "https://github.com/rust-lang/rust",
+ "title": "Rust",
+ "description": "Rust is a multi-paradigm programming language designed for performance and safety, especially safe concurrency.",
+ "date": "2020-06-25",
+ },
+ {
+ "githubUrl": "https://github.com/kubernetes/kubernetes",
+ "title": "Kubernetes",
+ "description": "Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.",
+ "date": "2022-10-14",
+ }
+];
+
+
+export const MOCK_MODELS = [
+ {
+ "appModuleId": "AiravataAgent_6a584041-c8ee-4f89-b1cc-6905093b504c",
+ "appModuleName": "AiravataAgent",
+ "appModuleVersion": "1.0.0",
+ "appModuleDescription": "Airavata Agent Application",
+ "url": "https://cybershuttle.org/api/applications/AiravataAgent_6a584041-c8ee-4f89-b1cc-6905093b504c/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/AiravataAgent_6a584041-c8ee-4f89-b1cc-6905093b504c/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/AiravataAgent_6a584041-c8ee-4f89-b1cc-6905093b504c/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "AlphaFold2_c177803a-f1d2-4559-a306-2e1b9cef6496",
+ "appModuleName": "AlphaFold2",
+ "appModuleVersion": "2.2.0",
+ "appModuleDescription": "AlphaFold is an AI system developed by DeepMind that makes state-of-the-art accurate predictions of a protein’s structure from its amino-acid sequence.",
+ "url": "https://cybershuttle.org/api/applications/AlphaFold2_c177803a-f1d2-4559-a306-2e1b9cef6496/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/AlphaFold2_c177803a-f1d2-4559-a306-2e1b9cef6496/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/AlphaFold2_c177803a-f1d2-4559-a306-2e1b9cef6496/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "Amber_pmemd_7fe7fb4b-38a7-45c4-a4e5-2ca9f4f49f3b",
+ "appModuleName": "Amber_pmemd",
+ "appModuleVersion": null,
+ "appModuleDescription": "Assisted Model Building with Energy Refinement MD Package with Particle Mesh Ewald summation for electrostatic interactions",
+ "url": "https://cybershuttle.org/api/applications/Amber_pmemd_7fe7fb4b-38a7-45c4-a4e5-2ca9f4f49f3b/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/Amber_pmemd_7fe7fb4b-38a7-45c4-a4e5-2ca9f4f49f3b/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/Amber_pmemd_7fe7fb4b-38a7-45c4-a4e5-2ca9f4f49f3b/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "Amber_pmemd_CUDA_25c95122-ac00-4ba6-a834-33f129ad6eb2",
+ "appModuleName": "Amber_pmemd_CUDA",
+ "appModuleVersion": "Amber.22-CUDA",
+ "appModuleDescription": "GPU openmpi version of AMBER pmemd",
+ "url": "https://cybershuttle.org/api/applications/Amber_pmemd_CUDA_25c95122-ac00-4ba6-a834-33f129ad6eb2/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/Amber_pmemd_CUDA_25c95122-ac00-4ba6-a834-33f129ad6eb2/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/Amber_pmemd_CUDA_25c95122-ac00-4ba6-a834-33f129ad6eb2/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "CyberFaCESAgent_74734794-25db-413b-972b-dffbfab346ca",
+ "appModuleName": "CyberFaCESAgent",
+ "appModuleVersion": "1.0.0",
+ "appModuleDescription": "CyberFaCES Agent",
+ "url": "https://cybershuttle.org/api/applications/CyberFaCESAgent_74734794-25db-413b-972b-dffbfab346ca/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/CyberFaCESAgent_74734794-25db-413b-972b-dffbfab346ca/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/CyberFaCESAgent_74734794-25db-413b-972b-dffbfab346ca/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "Echo_88202f35-beef-414a-84a4-6ee9dd4f5a84",
+ "appModuleName": "Echo",
+ "appModuleVersion": "",
+ "appModuleDescription": "",
+ "url": "https://cybershuttle.org/api/applications/Echo_88202f35-beef-414a-84a4-6ee9dd4f5a84/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/Echo_88202f35-beef-414a-84a4-6ee9dd4f5a84/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/Echo_88202f35-beef-414a-84a4-6ee9dd4f5a84/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "Gaussian16_43c4b549-f8c2-4024-accc-d5e965a0025a",
+ "appModuleName": "Gaussian16",
+ "appModuleVersion": "Gaussian16/c.02",
+ "appModuleDescription": "Quantum chemistry application",
+ "url": "https://cybershuttle.org/api/applications/Gaussian16_43c4b549-f8c2-4024-accc-d5e965a0025a/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/Gaussian16_43c4b549-f8c2-4024-accc-d5e965a0025a/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/Gaussian16_43c4b549-f8c2-4024-accc-d5e965a0025a/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "GEM_Magnetic_Reconnection_Challenge_Problem_43026dd1-5229-4d80-8be3-32c7b876e157",
+ "appModuleName": "GEM_Magnetic_Reconnection_Challenge_Problem",
+ "appModuleVersion": "1.0",
+ "appModuleDescription": "\"Magnetic reconnection is studied in a simple Harris sheet configuration with a specified set of initial conditions, including a finite amplitude, magnetic island perturbation to trigger the dynamics.\" [https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/1999JA900449]",
+ "url": "https://cybershuttle.org/api/applications/GEM_Magnetic_Reconnection_Challenge_Problem_43026dd1-5229-4d80-8be3-32c7b876e157/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/GEM_Magnetic_Reconnection_Challenge_Problem_43026dd1-5229-4d80-8be3-32c7b876e157/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/GEM_Magnetic_Reconnection_Challenge_Problem_43026dd1-5229-4d80-8be3-32c7b876e157/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "GkeyllAgent_c884a86e-5c5e-416d-93e9-59361ac87898",
+ "appModuleName": "GkeyllAgent",
+ "appModuleVersion": "1.0.0",
+ "appModuleDescription": "Gkeyll Agent",
+ "url": "https://cybershuttle.org/api/applications/GkeyllAgent_c884a86e-5c5e-416d-93e9-59361ac87898/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/GkeyllAgent_c884a86e-5c5e-416d-93e9-59361ac87898/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/GkeyllAgent_c884a86e-5c5e-416d-93e9-59361ac87898/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "Groamcs_with_OptionalRestart_cd3e614c-c66c-4b67-b944-42f0adbaba16",
+ "appModuleName": "Gromacs_with_OptionalRestart",
+ "appModuleVersion": "2016.3",
+ "appModuleDescription": "Gromacs with optional restart from cpt file staged from a previous job ID provided in a restart text file",
+ "url": "https://cybershuttle.org/api/applications/Groamcs_with_OptionalRestart_cd3e614c-c66c-4b67-b944-42f0adbaba16/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/Groamcs_with_OptionalRestart_cd3e614c-c66c-4b67-b944-42f0adbaba16/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/Groamcs_with_OptionalRestart_cd3e614c-c66c-4b67-b944-42f0adbaba16/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "NAMD_76b9b262-de09-4ab7-b4d4-e89502405af7",
+ "appModuleName": "NAMD",
+ "appModuleVersion": "2.14/3.2022.07",
+ "appModuleDescription": "NAMD is a parallel, object-oriented molecular dynamics code designed for high-performance simulation of large biomolecular systems. Simulation preparation and analysis is integrated into the visualization package VMD. Visit the NAMD website for complete information.",
+ "url": "https://cybershuttle.org/api/applications/NAMD_76b9b262-de09-4ab7-b4d4-e89502405af7/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/NAMD_76b9b262-de09-4ab7-b4d4-e89502405af7/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/NAMD_76b9b262-de09-4ab7-b4d4-e89502405af7/application_deployments/",
+ "userHasWriteAccess": false
+ },
+ {
+ "appModuleId": "VsCode_0545a9d1-2ab1-4312-b0e9-dfa8f470cb15",
+ "appModuleName": "VsCode",
+ "appModuleVersion": "V1.0",
+ "appModuleDescription": null,
+ "url": "https://cybershuttle.org/api/applications/VsCode_0545a9d1-2ab1-4312-b0e9-dfa8f470cb15/",
+ "applicationInterface": "https://cybershuttle.org/api/applications/VsCode_0545a9d1-2ab1-4312-b0e9-dfa8f470cb15/application_interface/",
+ "applicationDeployments": "https://cybershuttle.org/api/applications/VsCode_0545a9d1-2ab1-4312-b0e9-dfa8f470cb15/application_deployments/",
+ "userHasWriteAccess": false
+ }
+];
\ No newline at end of file
diff --git a/portal/src/interfaces/AuthorType.tsx b/portal/src/interfaces/AuthorType.tsx
new file mode 100644
index 0000000000..7beaed29a3
--- /dev/null
+++ b/portal/src/interfaces/AuthorType.tsx
@@ -0,0 +1,5 @@
+export interface AuthorType {
+ name: string;
+ avatar: string;
+ role: string;
+}
diff --git a/portal/src/interfaces/DatasetType.tsx b/portal/src/interfaces/DatasetType.tsx
new file mode 100644
index 0000000000..c331b864d8
--- /dev/null
+++ b/portal/src/interfaces/DatasetType.tsx
@@ -0,0 +1,7 @@
+import { MetadataType } from "./MetadataType";
+
+export interface DatasetType {
+ metadata: MetadataType;
+ datasetUrl: string;
+ private: true | false;
+}
diff --git a/portal/src/interfaces/MetadataType.tsx b/portal/src/interfaces/MetadataType.tsx
new file mode 100644
index 0000000000..ba183d2185
--- /dev/null
+++ b/portal/src/interfaces/MetadataType.tsx
@@ -0,0 +1,14 @@
+import { AuthorType } from "./AuthorType";
+
+export interface MetadataType {
+ type: string;
+ title: string;
+ slug: string;
+ description: string;
+ author: AuthorType;
+ tags: string[];
+ date: string;
+ images: {
+ headerImage: string;
+ };
+}
diff --git a/portal/src/interfaces/ModelType.tsx b/portal/src/interfaces/ModelType.tsx
new file mode 100644
index 0000000000..7d1f933a11
--- /dev/null
+++ b/portal/src/interfaces/ModelType.tsx
@@ -0,0 +1,10 @@
+export interface ModelType {
+ appModuleId: string;
+ appModuleName: string;
+ appModuleVersion: string;
+ appModuleDescription: string;
+ url: string;
+ applicationInterface: string;
+ applicationDeployments: string;
+ userHasWriteAccess: boolean;
+}
diff --git a/portal/src/interfaces/ProjectType.tsx b/portal/src/interfaces/ProjectType.tsx
new file mode 100644
index 0000000000..b09bb66ced
--- /dev/null
+++ b/portal/src/interfaces/ProjectType.tsx
@@ -0,0 +1,7 @@
+import { MetadataType } from "./MetadataType";
+
+export interface ProjectType {
+ metadata: MetadataType;
+ notebookViewer?: string;
+ repositoryUrl?: string;
+}
diff --git a/portal/src/interfaces/SessionType.tsx b/portal/src/interfaces/SessionType.tsx
new file mode 100644
index 0000000000..fb483cc421
--- /dev/null
+++ b/portal/src/interfaces/SessionType.tsx
@@ -0,0 +1,11 @@
+export interface SessionType {
+ sessionId: string;
+ title: string;
+ started: string;
+ models: string[];
+ datasets: string[];
+ nodes: number;
+ ram: number;
+ storage: number;
+ status: "running" | "stopped";
+}
diff --git a/portal/src/main.tsx b/portal/src/main.tsx
new file mode 100644
index 0000000000..f12fb02d01
--- /dev/null
+++ b/portal/src/main.tsx
@@ -0,0 +1,12 @@
+import { Provider } from "@/components/ui/provider";
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App";
+
+ReactDOM.createRoot(document.getElementById("root")!).render(
+ <React.StrictMode>
+ <Provider>
+ <App />
+ </Provider>
+ </React.StrictMode>
+);
diff --git a/portal/src/vite-env.d.ts b/portal/src/vite-env.d.ts
new file mode 100644
index 0000000000..11f02fe2a0
--- /dev/null
+++ b/portal/src/vite-env.d.ts
@@ -0,0 +1 @@
+/// <reference types="vite/client" />
diff --git a/portal/tsconfig.app.json b/portal/tsconfig.app.json
new file mode 100644
index 0000000000..7f8080a94e
--- /dev/null
+++ b/portal/tsconfig.app.json
@@ -0,0 +1,29 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true,
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["src"]
+}
diff --git a/portal/tsconfig.json b/portal/tsconfig.json
new file mode 100644
index 0000000000..1ffef600d9
--- /dev/null
+++ b/portal/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/portal/tsconfig.node.json b/portal/tsconfig.node.json
new file mode 100644
index 0000000000..db0becc8b0
--- /dev/null
+++ b/portal/tsconfig.node.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2022",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/portal/vite.config.ts b/portal/vite.config.ts
new file mode 100644
index 0000000000..45f06a5dbb
--- /dev/null
+++ b/portal/vite.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import tsconfigPaths from "vite-tsconfig-paths";
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: [react(), tsconfigPaths()],
+});