diff --git a/CHANGELOG.md b/CHANGELOG.md
index d80bce8..9e7103e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
+- **TypeScript Type Generation from OpenAPI**
+ - Added `@hey-api/openapi-ts` for automatic type generation from backend Swagger spec
+ - Created `openapi-ts.config.ts` configuration using local swagger.json file (avoids SSL certificate issues)
+ - Added `pnpm generate:api` script that downloads swagger.json and generates types
+ - Added `pnpm generate:api:download` to download swagger.json from backend
+ - Added `pnpm generate:api:types` to generate types from local file
+ - Generated API client in `src/client/` with full type-safety
+ - Added `swagger.json` to `.gitignore` (temporary file)
+- **JWT Authentication Helpers**
+ - Created `src/lib/auth.ts` with token management functions
+ - `getAuthToken()`, `setAuthTokens()`, `clearAuthToken()` helpers
+ - Multi-tenancy support with `getTenantId()` and `setTenantId()`
+ - User info storage helpers
+- **Configured API Client**
+ - Created `src/lib/api/client.ts` with ASP.NET Boilerplate interceptors
+ - Automatic `Authorization: Bearer` header injection
+ - Automatic `Abp.TenantId` header for multi-tenancy
+ - Response unwrapping for ABP format (`{ result, success, error }`)
+ - Error handling and automatic redirect on unauthorized requests
+- **Documentation**
+ - Created `src/lib/api/README.md` with comprehensive usage examples
+ - Created `TROUBLESHOOTING.md` with solutions to common issues
+ - Updated `CLAUDE.md` with TypeScript type generation workflow
+ - Added OpenAPI client documentation and benefits
+ - Documented SSL certificate workaround for localhost development
+- **Project Setup**
+ - Added `src/client/` to `.gitignore` (generated files)
- Created `CLAUDE.md` with comprehensive project documentation for Claude Code
- Project overview and architecture description
- Common commands for both .NET backend and Next.js frontend
@@ -17,3 +44,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Version information
- Created `CHANGELOG.md` to track all project changes
- Added changelog management rules to `CLAUDE.md`
+
+### Removed
+- Removed Clerk authentication dependencies (`@clerk/nextjs`, `@clerk/themes`)
+- Removed Clerk configuration from project (replaced with native JWT authentication)
+- Removed all Clerk-related components and hooks from the codebase
+- Removed Clerk references from `.gitignore`
+
+### Fixed
+- Fixed import path for generated API client (use `@/client/client.gen` instead of `@/client`)
+- Resolved "Export client doesn't exist" error in auth-context.tsx
+- Fixed SSL certificate issues when generating types from localhost by downloading swagger.json first
+
+### Changed
+- **Complete Authentication System Replacement**
+ - Replaced Clerk authentication with custom JWT-based authentication system
+ - Created `AuthProvider` and `useAuth` hook to manage authentication state
+ - Updated all components to use `useAuth` instead of Clerk's `useUser`
+ - Frontend now stores JWT tokens in localStorage instead of using Clerk
+ - Updated development workflow to include type generation step after backend changes
+- **Custom Authentication Components**
+ - Created `CustomSignInForm` component replacing Clerk's SignIn
+ - Created `CustomSignUpForm` component replacing Clerk's SignUp
+ - Created `CustomUserProfile` component replacing Clerk's UserProfile
+ - Updated sign-in-view.tsx, sign-up-view.tsx, and profile-view-page.tsx to use custom components
+- **Route Protection**
+ - Implemented Next.js middleware for route protection
+ - Middleware handles authentication redirects and route guards
+ - Simplified page.tsx files to rely on middleware for auth checks
+- **Component Updates**
+ - Updated `providers.tsx` to use `AuthProvider` instead of `ClerkProvider`
+ - Updated `user-nav.tsx` to use `useAuth` hook with custom logout functionality
+ - Updated `app-sidebar.tsx` to use `useAuth` hook
+ - Maintained existing UI/UX while swapping authentication providers
diff --git a/CLAUDE.md b/CLAUDE.md
index 1473531..b1f0440 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -50,7 +50,7 @@ The application implements dynamic OIDC (OpenID Connect) authentication with ext
**Architecture**: Feature-based organization using Next.js 15 App Router
- `src/app/`: Route structure with App Router conventions
- - `(auth)/`: Authentication routes (sign-in, sign-up) using Clerk
+ - `(auth)/`: Authentication routes (sign-in, sign-up)
- `(dashboard)/`: Protected dashboard routes with parallel routes (`@area_stats`, `@bar_stats`, etc.)
- `dashboard/product/`, `dashboard/kanban/`, `dashboard/profile/`
@@ -67,7 +67,8 @@ The application implements dynamic OIDC (OpenID Connect) authentication with ext
**Tech Stack**:
- Next.js 15 with React 19
-- Clerk for authentication
+- JWT authentication with ASP.NET Boilerplate backend
+- @hey-api/openapi-ts for type-safe API client generation
- Tailwind CSS v4
- shadcn-ui components
- Zod for schema validation
@@ -147,6 +148,12 @@ pnpm lint:fix
pnpm format
```
+**Generate API types** (from OpenAPI spec):
+```bash
+pnpm generate:api
+```
+*Note: Backend must be running at https://localhost:44313*
+
**Pre-commit hooks**: Husky is configured with lint-staged for automatic formatting
## Key Concepts
@@ -179,10 +186,17 @@ The backend implements dynamic OIDC provider registration:
## Development Workflow
-1. **Backend changes**: Update entities → add migration → run migrator → update app services/DTOs
+1. **Backend changes**: Update entities → add migration → run migrator → update app services/DTOs → regenerate frontend types
2. **Frontend changes**: Follow feature-based organization, create components in appropriate feature folder
-3. **API integration**: Frontend calls backend API (configure base URL in Next.js environment variables)
-4. **Authentication flow**: Frontend uses Clerk → Backend validates JWT tokens
+3. **API integration**:
+ - Run backend: `cd src/ASPBaseOIDC.Web.Host && dotnet run`
+ - Generate types: `cd src/ASPBaseOIDC.Web.Ui && pnpm generate:api`
+ - Use type-safe client: `import { client } from '@/lib/api/client'`
+4. **Authentication flow**:
+ - Frontend authenticates via `/api/TokenAuth/Authenticate`
+ - JWT token stored in localStorage
+ - Client automatically adds `Authorization: Bearer ` header
+ - Backend validates JWT tokens
## Changelog Management
@@ -208,6 +222,89 @@ The backend implements dynamic OIDC provider registration:
This practice ensures all changes are documented and traceable for team members and future instances of Claude Code.
+## TypeScript Type Generation (OpenAPI Client)
+
+The frontend uses **@hey-api/openapi-ts** to automatically generate TypeScript types and a type-safe HTTP client from the backend's OpenAPI specification.
+
+### Setup and Usage
+
+**Prerequisites**: Backend must be running (`dotnet run` in `ASPBaseOIDC.Web.Host`)
+
+**Generate types**:
+```bash
+cd src/ASPBaseOIDC.Web.Ui
+pnpm generate:api
+```
+
+This generates:
+- `src/client/types.gen.ts` - All TypeScript types matching backend DTOs
+- `src/client/sdk.gen.ts` - Type-safe API client methods
+- `src/client/client.gen.ts` - HTTP client configuration
+
+**Configuration**: `openapi-ts.config.ts` in Web.Ui root
+- Input: `https://localhost:44313/swagger/v1/swagger.json`
+- Output: `src/client/`
+- Plugins: TypeScript types + SDK generation
+
+### Using the API Client
+
+**Import the configured client**:
+```typescript
+import { client } from '@/lib/api/client';
+```
+
+**Server Component** (recommended):
+```typescript
+const response = await client.GET('/api/services/app/User/GetAll', {
+ params: { query: { maxResultCount: 10 } }
+});
+const users = response.data; // Fully typed!
+```
+
+**Client Component**:
+```typescript
+'use client';
+const [data, setData] = useState();
+useEffect(() => {
+ client.GET('/api/endpoint').then(r => setData(r.data));
+}, []);
+```
+
+### Authentication Handling
+
+The client in `src/lib/api/client.ts` automatically:
+1. Adds `Authorization: Bearer ` from localStorage
+2. Adds `Abp.TenantId` header if multi-tenancy is active
+3. Unwraps ABP response format (`{ result, success, error }`)
+4. Throws errors for failed requests
+5. Redirects to login on unauthorized requests
+
+**Authentication helpers** in `src/lib/auth.ts`:
+- `getAuthToken()` - Get current JWT token
+- `setAuthTokens()` - Store tokens after login
+- `clearAuthToken()` - Clear tokens on logout
+- `getTenantId()` / `setTenantId()` - Multi-tenancy support
+
+### When to Regenerate Types
+
+Run `pnpm generate:api` when:
+- Backend DTOs change
+- New endpoints are added
+- Response/request schemas are modified
+- After pulling backend changes from git
+
+**Tip**: Add to your workflow after `dotnet build` succeeds
+
+### Benefits
+
+✅ **Full type-safety** - TypeScript knows all endpoints, parameters, and responses
+✅ **IntelliSense** - Autocomplete for all API calls
+✅ **Compile-time errors** - Catch API mismatches before runtime
+✅ **No manual typing** - Types sync automatically with C# DTOs
+✅ **ABP integration** - Handles response unwrapping and error handling
+
+**Example**: See `src/lib/api/README.md` for detailed usage examples
+
## Important Files
- `src/ASPBaseOIDC.Core/ASPBaseOIDCConsts.cs`: Global constants
@@ -215,6 +312,10 @@ This practice ensures all changes are documented and traceable for team members
- `src/ASPBaseOIDC.EntityFrameworkCore/EntityFrameworkCore/ASPBaseOIDCDbContext.cs`: Database context
- `src/ASPBaseOIDC.Web.Host/Startup/AuthConfigurer.cs`: Authentication configuration
- `src/ASPBaseOIDC.Web.Ui/package.json`: Frontend dependencies and scripts
+- `src/ASPBaseOIDC.Web.Ui/openapi-ts.config.ts`: OpenAPI type generator configuration
+- `src/ASPBaseOIDC.Web.Ui/src/lib/api/client.ts`: Configured API client with ABP interceptors
+- `src/ASPBaseOIDC.Web.Ui/src/lib/auth.ts`: Authentication helpers and token management
+- `src/ASPBaseOIDC.Web.Ui/src/lib/api/README.md`: API client usage guide with examples
- `src/ASPBaseOIDC.Web.Ui/src/app/layout.tsx`: Root layout with providers
## Version Information
diff --git a/src/ASPBaseOIDC.Web.Ui/.gitignore b/src/ASPBaseOIDC.Web.Ui/.gitignore
index cdb8a29..3aa67f4 100644
--- a/src/ASPBaseOIDC.Web.Ui/.gitignore
+++ b/src/ASPBaseOIDC.Web.Ui/.gitignore
@@ -35,9 +35,11 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts
+# generated API client
+/src/client
+swagger.json
+
.idea/
-# clerk configuration (can include secrets)
-/.clerk/
# cursor
diff --git a/src/ASPBaseOIDC.Web.Ui/QUICK_START.md b/src/ASPBaseOIDC.Web.Ui/QUICK_START.md
new file mode 100644
index 0000000..a68bfdf
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/QUICK_START.md
@@ -0,0 +1,90 @@
+# Quick Start Guide
+
+## Prerequisites
+
+1. **Backend running** at `https://localhost:44313`
+2. **Node.js** and **pnpm** installed
+
+## Setup Steps
+
+### 1. Install Dependencies
+
+```bash
+pnpm install
+```
+
+### 2. Generate API Types
+
+```bash
+# Downloads swagger.json and generates TypeScript types
+pnpm generate:api
+```
+
+This creates the `src/client/` directory with:
+- `types.gen.ts` - All TypeScript types from backend DTOs
+- `sdk.gen.ts` - Type-safe API methods
+- `client.gen.ts` - Configured HTTP client
+
+### 3. Create Environment File
+
+```bash
+cp env.example.txt .env.local
+```
+
+Add your backend API URL:
+```env
+NEXT_PUBLIC_API_URL=https://localhost:44313
+```
+
+### 4. Start Development Server
+
+```bash
+pnpm dev
+```
+
+The app will be running at `http://localhost:3000`
+
+---
+
+## First-Time Use
+
+1. Navigate to `http://localhost:3000`
+2. You'll be redirected to `/auth/sign-in`
+3. Login with your backend credentials
+4. You'll be redirected to `/dashboard/overview`
+
+---
+
+## Common Commands
+
+| Command | Description |
+|---------|-------------|
+| `pnpm dev` | Start development server with Turbopack |
+| `pnpm build` | Build for production |
+| `pnpm start` | Start production server |
+| `pnpm lint` | Run ESLint |
+| `pnpm format` | Format code with Prettier |
+| `pnpm generate:api` | Regenerate API types from backend |
+
+---
+
+## Project Structure
+
+```
+src/
+├── app/ # Next.js App Router pages
+│ ├── (auth)/ # Authentication routes
+│ └── dashboard/ # Protected dashboard routes
+├── client/ # 🔥 Generated API client (don't edit!)
+├── components/ # Shared UI components
+│ ├── ui/ # shadcn-ui components
+│ └── layout/ # Layout components
+├── contexts/ # React contexts
+│ └── auth-context.tsx # Authentication state management
+├── features/ # Feature-specific components
+│ ├── auth/ # Login/Register forms
+│ └── profile/ # User profile
+├── lib/ # Utilities and configurations
+│ ├── api/ # API client configuration
+│ └── auth.ts # Authentication helpers
+└── middleware.ts # Route protection
\ No newline at end of file
diff --git a/src/ASPBaseOIDC.Web.Ui/TROUBLESHOOTING.md b/src/ASPBaseOIDC.Web.Ui/TROUBLESHOOTING.md
new file mode 100644
index 0000000..b63d6a9
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/TROUBLESHOOTING.md
@@ -0,0 +1,144 @@
+# Troubleshooting Guide
+
+## API Type Generation Issues
+
+### Problem: "Request failed with status 200"
+
+**Error:**
+```
+Error: Request failed with status 200
+```
+
+**Cause:** This error occurs when trying to generate types directly from `https://localhost:44313` due to self-signed SSL certificates.
+
+**Solution:** The project is configured to download the swagger.json file locally first, then generate types from the local file.
+
+**How it works:**
+1. `pnpm generate:api:download` - Downloads swagger.json using curl (which accepts self-signed certs with `-k` flag)
+2. `pnpm generate:api:types` - Generates types from the local swagger.json file
+3. `pnpm generate:api` - Runs both commands sequentially
+
+**Configuration:** See `openapi-ts.config.ts`:
+```typescript
+{
+ input: './swagger.json', // Local file instead of HTTPS URL
+ // ...
+}
+```
+
+---
+
+## Authentication Issues
+
+### Problem: "Unauthorized" after login
+
+**Possible causes:**
+1. Token not being saved to localStorage
+2. Token not being sent in Authorization header
+3. Backend rejecting the token
+
+**Debug steps:**
+1. Check browser DevTools > Application > Local Storage
+ - Should see `accessToken` and `encryptedAccessToken`
+2. Check Network tab for API requests
+ - Look for `Authorization: Bearer ` header
+3. Check backend logs for token validation errors
+
+**Solution:** Verify `src/lib/api/client.ts` has the request interceptor configured.
+
+---
+
+## CORS Issues
+
+### Problem: "CORS policy: No 'Access-Control-Allow-Origin' header"
+
+**Cause:** Backend not configured to allow requests from the Next.js dev server.
+
+**Solution:** Add `http://localhost:3000` to CORS origins in backend `appsettings.json`:
+
+```json
+{
+ "App": {
+ "CorsOrigins": "http://localhost:3000,http://localhost:4200"
+ }
+}
+```
+
+---
+
+## Build Issues
+
+### Problem: "Export client doesn't exist"
+
+**Error:**
+```
+Export client doesn't exist in target module
+The export client was not found in module [project]/src/client/index.ts
+```
+
+**Cause:** Incorrect import path for the generated API client.
+
+**Solution:** Always import the client from `@/client/client.gen`:
+
+```typescript
+// ✅ Correct
+import { client } from '@/client/client.gen';
+
+// ❌ Wrong
+import { client } from '@/client';
+```
+
+**Why:** The `src/client/index.ts` file only re-exports types and SDK methods, not the client instance. The actual client is exported from `client.gen.ts`.
+
+---
+
+### Problem: Types not found after generation
+
+**Error:**
+```
+Cannot find module '@/client' or its corresponding type declarations
+```
+
+**Solution:**
+1. Ensure `pnpm generate:api` completed successfully
+2. Check that `src/client/` directory exists and contains:
+ - `index.ts`
+ - `types.gen.ts`
+ - `sdk.gen.ts`
+ - `client.gen.ts`
+3. Restart your IDE/editor's TypeScript server
+4. Clear Next.js cache: `rm -rf .next` and restart dev server
+
+---
+
+## Runtime Issues
+
+### Problem: "Module not found: Can't resolve '@/client'"
+
+**Cause:** Types haven't been generated yet.
+
+**Solution:**
+```bash
+# Make sure backend is running
+cd ../ASPBaseOIDC.Web.Host
+dotnet run
+
+# In another terminal, generate types
+cd src/ASPBaseOIDC.Web.Ui
+pnpm generate:api
+```
+
+---
+
+## Development Workflow
+
+**Recommended order:**
+1. Start backend: `dotnet run` in `ASPBaseOIDC.Web.Host`
+2. Generate types: `pnpm generate:api` in `ASPBaseOIDC.Web.Ui`
+3. Start frontend: `pnpm dev`
+
+**When to regenerate types:**
+- After changing DTOs in backend
+- After adding new API endpoints
+- After pulling backend changes from git
+- When seeing TypeScript errors about missing types
diff --git a/src/ASPBaseOIDC.Web.Ui/openapi-ts.config.ts b/src/ASPBaseOIDC.Web.Ui/openapi-ts.config.ts
new file mode 100644
index 0000000..980ce65
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/openapi-ts.config.ts
@@ -0,0 +1,25 @@
+import { defaultPlugins, defineConfig } from '@hey-api/openapi-ts';
+
+export default defineConfig({
+ // Use local file instead of HTTPS URL to avoid SSL certificate issues
+ input: './swagger.json',
+ output: {
+ path: 'src/client',
+ format: false,
+ lint: false,
+ },
+ plugins: [
+ ...defaultPlugins,
+ {
+ name: '@hey-api/typescript',
+ enums: 'javascript',
+ },
+ {
+ name: '@hey-api/sdk',
+ asClass: false,
+ },
+ ],
+ client: {
+ name: '@hey-api/client-fetch',
+ },
+});
diff --git a/src/ASPBaseOIDC.Web.Ui/package.json b/src/ASPBaseOIDC.Web.Ui/package.json
index c6c9bae..fb0de0a 100644
--- a/src/ASPBaseOIDC.Web.Ui/package.json
+++ b/src/ASPBaseOIDC.Web.Ui/package.json
@@ -15,7 +15,10 @@
"lint:strict": "eslint --max-warnings=0 src",
"format": "prettier --write .",
"format:check": "prettier -c -w .",
- "prepare": "husky"
+ "prepare": "husky",
+ "generate:api:download": "curl -k https://localhost:44313/swagger/v1/swagger.json -o swagger.json",
+ "generate:api:types": "openapi-ts",
+ "generate:api": "pnpm generate:api:download && pnpm generate:api:types"
},
"lint-staged": {
"**/*.{js,jsx,tsx,ts,css,less,scss,sass}": [
@@ -23,8 +26,6 @@
]
},
"dependencies": {
- "@clerk/nextjs": "^6.12.12",
- "@clerk/themes": "^2.2.26",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/modifiers": "^7.0.0",
"@dnd-kit/sortable": "^8.0.0",
@@ -78,6 +79,7 @@
"nextjs-toploader": "^3.7.15",
"nuqs": "^2.4.1",
"postcss": "8.4.49",
+ "radix-ui": "^1.4.3",
"react": "19.0.0",
"react-day-picker": "^8.10.1",
"react-dom": "19.0.0",
@@ -100,6 +102,7 @@
},
"devDependencies": {
"@faker-js/faker": "^9.3.0",
+ "@hey-api/openapi-ts": "^0.85.0",
"@types/node": "22.10.2",
"@types/react": "19.0.1",
"@types/react-dom": "19.0.2",
diff --git a/src/ASPBaseOIDC.Web.Ui/pnpm-lock.yaml b/src/ASPBaseOIDC.Web.Ui/pnpm-lock.yaml
index d5c4cea..15110d9 100644
--- a/src/ASPBaseOIDC.Web.Ui/pnpm-lock.yaml
+++ b/src/ASPBaseOIDC.Web.Ui/pnpm-lock.yaml
@@ -8,12 +8,6 @@ importers:
.:
dependencies:
- '@clerk/nextjs':
- specifier: ^6.12.12
- version: 6.12.12(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@clerk/themes':
- specifier: ^2.2.26
- version: 2.2.26
'@dnd-kit/core':
specifier: ^6.3.1
version: 6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -173,6 +167,9 @@ importers:
postcss:
specifier: 8.4.49
version: 8.4.49
+ radix-ui:
+ specifier: ^1.4.3
+ version: 1.4.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react:
specifier: 19.0.0
version: 19.0.0
@@ -234,6 +231,9 @@ importers:
'@faker-js/faker':
specifier: ^9.3.0
version: 9.6.0
+ '@hey-api/openapi-ts':
+ specifier: ^0.85.0
+ version: 0.85.0(typescript@5.7.2)
'@types/node':
specifier: 22.10.2
version: 22.10.2
@@ -345,45 +345,6 @@ packages:
resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
engines: {node: '>=6.9.0'}
- '@clerk/backend@1.25.8':
- resolution: {integrity: sha512-DmIc5pNQeTLHLCLN8ajcNhYNCfqmvwSwyGqr5aCHiJdWqGb9DGaws7PXU9btBiXVbI+NK/CJwjGv09+2rGpgAg==}
- engines: {node: '>=18.17.0'}
-
- '@clerk/clerk-react@5.25.5':
- resolution: {integrity: sha512-euG4T9EaN4af4YH7N8Fl6hIKnXQl+KSZv1WTLgD4KP90hSpVTMPkhdWeOiRFpNQ5I6WwtkaUPY16nce5y/NTQA==}
- engines: {node: '>=18.17.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
- react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0
-
- '@clerk/nextjs@6.12.12':
- resolution: {integrity: sha512-V1Vb1a5pTZArNrCy/YvpXCFQZsrRb54G+crzZ55kiuqvPaVGPguEoSCqjoaJ1RolyagXMhLKvht3Te6DYMSZEg==}
- engines: {node: '>=18.17.0'}
- peerDependencies:
- next: ^13.5.7 || ^14.2.25 || ^15.2.3
- react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
- react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0
-
- '@clerk/shared@3.2.3':
- resolution: {integrity: sha512-F8P7SqpcaLTV/wwCB3/1AkboO3YqFjb7qS6GoSDtVTFHMfpHJgHKhZ0vUBQFaLh/8ZV1kyRuiI/hrrbwIOF1EQ==}
- engines: {node: '>=18.17.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
- react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0
- peerDependenciesMeta:
- react:
- optional: true
- react-dom:
- optional: true
-
- '@clerk/themes@2.2.26':
- resolution: {integrity: sha512-lmZg1qH40GEGZOx3KxczQd6AMzZou5NUF1PtTUNsSaUVpylwr1/jjqdfOn6zgf+30MtAdSBr4T3H+BKE83se3w==}
- engines: {node: '>=18.17.0'}
-
- '@clerk/types@4.50.1':
- resolution: {integrity: sha512-GwsW/6LPHavHghh2QpmDbhyIuDP61OYV0T6x5hnjgAxjfexpRymbewR7Qez7H4kOo4gtnCNUrgTZ6nyresLEEg==}
- engines: {node: '>=18.17.0'}
-
'@dnd-kit/accessibility@3.1.1':
resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==}
peerDependencies:
@@ -467,6 +428,23 @@ packages:
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
+ '@hey-api/codegen-core@0.2.0':
+ resolution: {integrity: sha512-c7VjBy/8ed0EVLNgaeS9Xxams1Tuv/WK/b4xXH3Qr4wjzYeJUtxOcoP8YdwNLavqKP8pGiuctjX2Z1Pwc4jMgQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0}
+ peerDependencies:
+ typescript: '>=5.5.3'
+
+ '@hey-api/json-schema-ref-parser@1.2.0':
+ resolution: {integrity: sha512-BMnIuhVgNmSudadw1GcTsP18Yk5l8FrYrg/OSYNxz0D2E0vf4D5e4j5nUbuY8MU6p1vp7ev0xrfP6A/NWazkzQ==}
+ engines: {node: '>= 16'}
+
+ '@hey-api/openapi-ts@0.85.0':
+ resolution: {integrity: sha512-LSBHP2/wTF1BnaccHGX1t+0Ss+2VJQxotrLz/0+LK2z8ocuyVZXOYhfBSd7FP8sK78MDJVDBYrPCsBUvNSlH1g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.5.3'
+
'@hookform/resolvers@5.2.1':
resolution: {integrity: sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==}
peerDependencies:
@@ -721,6 +699,9 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@jsdevtools/ono@7.1.3':
+ resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
+
'@napi-rs/wasm-runtime@0.2.7':
resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==}
@@ -990,9 +971,41 @@ packages:
'@radix-ui/number@1.1.0':
resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==}
+ '@radix-ui/number@1.1.1':
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
+
'@radix-ui/primitive@1.1.1':
resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==}
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
+ '@radix-ui/react-accessible-icon@1.1.7':
+ resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-accordion@1.2.12':
+ resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-accordion@1.2.3':
resolution: {integrity: sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==}
peerDependencies:
@@ -1006,6 +1019,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-alert-dialog@1.1.15':
+ resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-alert-dialog@1.1.6':
resolution: {integrity: sha512-p4XnPqgej8sZAAReCAKgz1REYZEBLR8hU9Pg27wFnCWIMc8g1ccCs0FjBcy05V15VTu8pAePw/VDYeOm/uZ6yQ==}
peerDependencies:
@@ -1032,6 +1058,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-aspect-ratio@1.1.2':
resolution: {integrity: sha512-TaJxYoCpxJ7vfEkv2PTNox/6zzmpKXT6ewvCuf2tTOIVN45/Jahhlld29Yw4pciOXS2Xq91/rSGEdmEnUWZCqA==}
peerDependencies:
@@ -1045,6 +1084,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-aspect-ratio@1.1.7':
+ resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-avatar@1.1.10':
+ resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-avatar@1.1.3':
resolution: {integrity: sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==}
peerDependencies:
@@ -1071,6 +1136,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-checkbox@1.3.3':
+ resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-collapsible@1.1.3':
resolution: {integrity: sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==}
peerDependencies:
@@ -1097,6 +1188,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-collection@1.1.7':
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-compose-refs@1.1.1':
resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==}
peerDependencies:
@@ -1106,6 +1210,28 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context-menu@2.2.16':
+ resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-context-menu@2.2.6':
resolution: {integrity: sha512-aUP99QZ3VU84NPsHeaFt4cQUNgJqFsLLOt/RbbWXszZ6MP0DpDyjkFZORr4RpAEx3sUBk+Kc8h13yGtC5Qw8dg==}
peerDependencies:
@@ -1128,6 +1254,28 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dialog@1.1.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-dialog@1.1.6':
resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==}
peerDependencies:
@@ -1150,6 +1298,28 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-dismissable-layer@1.1.5':
resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==}
peerDependencies:
@@ -1163,6 +1333,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-dropdown-menu@2.1.16':
+ resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-dropdown-menu@2.1.6':
resolution: {integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==}
peerDependencies:
@@ -1185,6 +1368,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-focus-guards@1.1.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-focus-scope@1.1.2':
resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==}
peerDependencies:
@@ -1198,6 +1390,45 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-focus-scope@1.1.7':
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-form@0.1.8':
+ resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-hover-card@1.1.15':
+ resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-hover-card@1.1.6':
resolution: {integrity: sha512-E4ozl35jq0VRlrdc4dhHrNSV0JqBb4Jy73WAhBEK7JoYnQ83ED5r0Rb/XdVKw89ReAJN38N492BAPBZQ57VmqQ==}
peerDependencies:
@@ -1225,6 +1456,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-label@2.1.2':
resolution: {integrity: sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==}
peerDependencies:
@@ -1238,6 +1478,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-label@2.1.7':
+ resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-menu@2.1.16':
+ resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-menu@2.1.6':
resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==}
peerDependencies:
@@ -1251,6 +1517,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-menubar@1.1.16':
+ resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-menubar@1.1.6':
resolution: {integrity: sha512-FHq7+3DlXwh/7FOM4i0G4bC4vPjiq89VEEvNF4VMLchGnaUuUbE5uKXMUCjdKaOghEEMeiKa5XCa2Pk4kteWmg==}
peerDependencies:
@@ -1264,6 +1543,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-navigation-menu@1.2.5':
resolution: {integrity: sha512-myMHHQUZ3ZLTi8W381/Vu43Ia0NqakkQZ2vzynMmTUtQQ9kNkjzhOwkZC9TAM5R07OZUVIQyHC06f/9JZJpvvA==}
peerDependencies:
@@ -1277,6 +1569,45 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-one-time-password-field@0.1.8':
+ resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-password-toggle-field@0.1.3':
+ resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popover@1.1.15':
+ resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-popover@1.1.6':
resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==}
peerDependencies:
@@ -1303,6 +1634,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-portal@1.1.4':
resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==}
peerDependencies:
@@ -1316,6 +1660,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-portal@1.1.9':
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-presence@1.1.2':
resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==}
peerDependencies:
@@ -1329,6 +1686,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-primitive@2.0.2':
resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==}
peerDependencies:
@@ -1342,6 +1712,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-primitive@2.1.3':
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-progress@1.1.2':
resolution: {integrity: sha512-u1IgJFQ4zNAUTjGdDL5dcl/U8ntOR6jsnhxKb5RKp5Ozwl88xKR9EqRZOe/Mk8tnx0x5tNUe2F+MzsyjqMg0MA==}
peerDependencies:
@@ -1355,6 +1738,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-progress@1.1.7':
+ resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-radio-group@1.2.3':
resolution: {integrity: sha512-xtCsqt8Rp09FK50ItqEqTJ7Sxanz8EM8dnkVIhJrc/wkMMomSmXHvYbhv3E7Zx4oXh98aaLt9W679SUYXg4IDA==}
peerDependencies:
@@ -1368,6 +1764,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-radio-group@1.3.8':
+ resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.11':
+ resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-roving-focus@1.1.2':
resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==}
peerDependencies:
@@ -1381,6 +1803,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-scroll-area@1.2.3':
resolution: {integrity: sha512-l7+NNBfBYYJa9tNqVcP2AGvxdE3lmE6kFTBXdvHgUaZuy+4wGCL1Cl2AfaR7RKyimj7lZURGLwFO59k4eBnDJQ==}
peerDependencies:
@@ -1407,6 +1842,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-select@2.2.6':
+ resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-separator@1.1.2':
resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==}
peerDependencies:
@@ -1420,6 +1868,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-separator@1.1.7':
+ resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-slider@1.2.3':
resolution: {integrity: sha512-nNrLAWLjGESnhqBqcCNW4w2nn7LxudyMzeB6VgdyAnFLC6kfQgnAjSL2v6UkQTnDctJBlxrmxfplWS4iYjdUTw==}
peerDependencies:
@@ -1433,6 +1894,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-slider@1.3.6':
+ resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-slot@1.1.2':
resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==}
peerDependencies:
@@ -1442,6 +1916,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-slot@1.2.3':
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-switch@1.1.3':
resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==}
peerDependencies:
@@ -1455,6 +1938,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-switch@1.2.6':
+ resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-tabs@1.1.13':
+ resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-tabs@1.1.3':
resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==}
peerDependencies:
@@ -1468,6 +1977,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-toast@1.2.15':
+ resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-toast@1.2.6':
resolution: {integrity: sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA==}
peerDependencies:
@@ -1481,6 +2003,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-toggle-group@1.1.11':
+ resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-toggle-group@1.1.2':
resolution: {integrity: sha512-JBm6s6aVG/nwuY5eadhU2zDi/IwYS0sDM5ZWb4nymv/hn3hZdkw+gENn0LP4iY1yCd7+bgJaCwueMYJIU3vk4A==}
peerDependencies:
@@ -1494,6 +2029,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-toggle@1.1.10':
+ resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-toggle@1.1.2':
resolution: {integrity: sha512-lntKchNWx3aCHuWKiDY+8WudiegQvBpDRAYL8dKLRvKEH8VOpl0XX6SSU/bUBqIRJbcTy4+MW06Wv8vgp10rzQ==}
peerDependencies:
@@ -1507,6 +2055,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-toolbar@1.1.11':
+ resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-tooltip@1.1.8':
resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==}
peerDependencies:
@@ -1520,6 +2081,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-tooltip@1.2.8':
+ resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-use-callback-ref@1.1.0':
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
peerDependencies:
@@ -1529,6 +2103,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-use-controllable-state@1.1.0':
resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
peerDependencies:
@@ -1538,6 +2121,24 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-use-escape-keydown@1.1.0':
resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
peerDependencies:
@@ -1547,6 +2148,24 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-is-hydrated@0.1.0':
+ resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-use-layout-effect@1.1.0':
resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
peerDependencies:
@@ -1556,6 +2175,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-use-previous@1.1.0':
resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==}
peerDependencies:
@@ -1565,6 +2193,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-use-rect@1.1.0':
resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
peerDependencies:
@@ -1574,6 +2211,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-use-size@1.1.0':
resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
peerDependencies:
@@ -1583,6 +2229,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-visually-hidden@1.1.2':
resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==}
peerDependencies:
@@ -1596,9 +2251,25 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-visually-hidden@1.2.3':
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/rect@1.1.0':
resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
'@reach/observe-rect@1.2.0':
resolution: {integrity: sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==}
@@ -2263,6 +2934,10 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
ansi-escapes@7.0.0:
resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
engines: {node: '>=18'}
@@ -2382,10 +3057,22 @@ packages:
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+
busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
+ c12@3.3.0:
+ resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==}
+ peerDependencies:
+ magicast: ^0.3.5
+ peerDependenciesMeta:
+ magicast:
+ optional: true
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -2421,10 +3108,17 @@ packages:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
chrome-trace-event@1.0.4:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
+ citty@0.1.6:
+ resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
cjs-module-lexer@1.4.3:
resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
@@ -2462,6 +3156,10 @@ packages:
color-string@1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+ color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+
color@4.2.3:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
@@ -2469,6 +3167,10 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ commander@13.0.0:
+ resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==}
+ engines: {node: '>=18'}
+
commander@13.1.0:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines: {node: '>=18'}
@@ -2482,13 +3184,16 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ confbox@0.2.2:
+ resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie@1.0.2:
- resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
- engines: {node: '>=18'}
-
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -2584,17 +3289,31 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ default-browser-id@5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+
+ default-browser@5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
+ destr@2.0.5:
+ resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
detect-libc@2.0.3:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
@@ -2622,13 +3341,14 @@ packages:
dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
- dot-case@3.0.4:
- resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
dotenv@16.5.0:
resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
engines: {node: '>=12'}
+ dotenv@17.2.3:
+ resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+ engines: {node: '>=12'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -2830,6 +3550,9 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
+ exsolve@1.0.7:
+ resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2965,6 +3688,10 @@ packages:
get-tsconfig@4.10.0:
resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
+ giget@2.0.0:
+ resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
+ hasBin: true
+
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3010,6 +3737,11 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
@@ -3134,6 +3866,11 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -3158,6 +3895,11 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -3217,6 +3959,10 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
+ is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -3235,9 +3981,9 @@ packages:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
- js-cookie@3.0.5:
- resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
- engines: {node: '>=14'}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -3398,9 +4144,6 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- lower-case@2.0.2:
- resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -3419,10 +4162,6 @@ packages:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
engines: {node: '>=12'}
- map-obj@4.3.0:
- resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
- engines: {node: '>=8'}
-
match-sorter@8.0.0:
resolution: {integrity: sha512-bGJ6Zb+OhzXe+ptP5d80OLVx7AkqfRbtGEh30vNSfjNwllu+hHI+tcbMIT/fbkx/FKN1PmKuDb65+Oofg+XUxw==}
@@ -3560,8 +4299,8 @@ packages:
react: '>= 16.0.0'
react-dom: '>= 16.0.0'
- no-case@3.0.4:
- resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+ node-fetch-native@1.6.7:
+ resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
@@ -3604,6 +4343,11 @@ packages:
react-router-dom:
optional: true
+ nypm@0.6.2:
+ resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==}
+ engines: {node: ^14.16.0 || >=16.10.0}
+ hasBin: true
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -3640,6 +4384,9 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ ohash@2.0.11:
+ resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -3651,6 +4398,10 @@ packages:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
+ open@10.1.2:
+ resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==}
+ engines: {node: '>=18'}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -3698,6 +4449,12 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ perfect-debounce@2.0.0:
+ resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==}
+
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
@@ -3725,6 +4482,9 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
@@ -3834,9 +4594,25 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ radix-ui@1.4.3:
+ resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ rc9@2.1.2:
+ resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
+
react-day-picker@8.10.1:
resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==}
peerDependencies:
@@ -3933,6 +4709,10 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
recharts-scale@0.4.5:
resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==}
@@ -4006,6 +4786,10 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
+ engines: {node: '>=18'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -4048,9 +4832,6 @@ packages:
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
- server-only@0.0.1:
- resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
-
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -4120,13 +4901,6 @@ packages:
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
engines: {node: '>=18'}
- snake-case@3.0.4:
- resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
- snakecase-keys@8.0.1:
- resolution: {integrity: sha512-Sj51kE1zC7zh6TDlNNz0/Jn1n5HiHdoQErxO8jLtnyrkJW/M5PrI7x05uDgY3BO7OUQYKCvmeMurW6BPUdwEOw==}
- engines: {node: '>=18'}
-
sonner@1.7.4:
resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==}
peerDependencies:
@@ -4154,9 +4928,6 @@ packages:
resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==}
engines: {node: '>=6'}
- std-env@3.8.1:
- resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==}
-
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
@@ -4237,11 +5008,6 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- swr@2.3.3:
- resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==}
- peerDependencies:
- react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
tailwind-merge@3.0.2:
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
@@ -4284,6 +5050,9 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ tinyexec@1.0.1:
+ resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
+
tinyglobby@0.2.12:
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
engines: {node: '>=12.0.0'}
@@ -4328,10 +5097,6 @@ packages:
resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
engines: {node: '>=8'}
- type-fest@4.39.0:
- resolution: {integrity: sha512-w2IGJU1tIgcrepg9ZJ82d8UmItNQtOFJG0HCUE3SzMokKkTsruVDALl2fAdiEzJlfduoU+VyXJWIIUZ+6jV+nw==}
- engines: {node: '>=16'}
-
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -4353,6 +5118,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
@@ -4469,6 +5239,9 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
wrap-ansi@9.0.0:
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
engines: {node: '>=18'}
@@ -4624,58 +5397,6 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
- '@clerk/backend@1.25.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@clerk/shared': 3.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@clerk/types': 4.50.1
- cookie: 1.0.2
- snakecase-keys: 8.0.1
- tslib: 2.8.1
- transitivePeerDependencies:
- - react
- - react-dom
-
- '@clerk/clerk-react@5.25.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@clerk/shared': 3.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@clerk/types': 4.50.1
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- tslib: 2.8.1
-
- '@clerk/nextjs@6.12.12(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@clerk/backend': 1.25.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@clerk/clerk-react': 5.25.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@clerk/shared': 3.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@clerk/types': 4.50.1
- next: 15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- server-only: 0.0.1
- tslib: 2.8.1
-
- '@clerk/shared@3.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@clerk/types': 4.50.1
- dequal: 2.0.3
- glob-to-regexp: 0.4.1
- js-cookie: 3.0.5
- std-env: 3.8.1
- swr: 2.3.3(react@19.0.0)
- optionalDependencies:
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
-
- '@clerk/themes@2.2.26':
- dependencies:
- '@clerk/types': 4.50.1
- tslib: 2.8.1
-
- '@clerk/types@4.50.1':
- dependencies:
- csstype: 3.1.3
-
'@dnd-kit/accessibility@3.1.1(react@19.0.0)':
dependencies:
react: 19.0.0
@@ -4781,6 +5502,32 @@ snapshots:
'@floating-ui/utils@0.2.9': {}
+ '@hey-api/codegen-core@0.2.0(typescript@5.7.2)':
+ dependencies:
+ typescript: 5.7.2
+
+ '@hey-api/json-schema-ref-parser@1.2.0':
+ dependencies:
+ '@jsdevtools/ono': 7.1.3
+ '@types/json-schema': 7.0.15
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+
+ '@hey-api/openapi-ts@0.85.0(typescript@5.7.2)':
+ dependencies:
+ '@hey-api/codegen-core': 0.2.0(typescript@5.7.2)
+ '@hey-api/json-schema-ref-parser': 1.2.0
+ ansi-colors: 4.1.3
+ c12: 3.3.0
+ color-support: 1.1.3
+ commander: 13.0.0
+ handlebars: 4.7.8
+ open: 10.1.2
+ semver: 7.7.2
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - magicast
+
'@hookform/resolvers@5.2.1(react-hook-form@7.54.2(react@19.0.0))':
dependencies:
'@standard-schema/utils': 0.3.0
@@ -4973,6 +5720,8 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
+ '@jsdevtools/ono@7.1.3': {}
+
'@napi-rs/wasm-runtime@0.2.7':
dependencies:
'@emnapi/core': 1.3.1
@@ -5112,7 +5861,7 @@ snapshots:
'@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.28.0
forwarded-parse: 2.1.2
- semver: 7.7.1
+ semver: 7.7.2
transitivePeerDependencies:
- supports-color
@@ -5237,7 +5986,7 @@ snapshots:
'@types/shimmer': 1.2.0
import-in-the-middle: 1.13.2
require-in-the-middle: 7.5.2
- semver: 7.7.1
+ semver: 7.7.2
shimmer: 1.2.1
transitivePeerDependencies:
- supports-color
@@ -5275,8 +6024,38 @@ snapshots:
'@radix-ui/number@1.1.0': {}
+ '@radix-ui/number@1.1.1': {}
+
'@radix-ui/primitive@1.1.1': {}
+ '@radix-ui/primitive@1.1.3': {}
+
+ '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-accordion@1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5294,6 +6073,20 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-alert-dialog@1.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5317,6 +6110,15 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-aspect-ratio@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -5326,6 +6128,28 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-avatar@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0)
@@ -5354,6 +6178,38 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-collapsible@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5382,12 +6238,44 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.1)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
+ '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-context-menu@2.2.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5408,6 +6296,34 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-context@1.1.2(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ aria-hidden: 1.2.4
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ react-remove-scroll: 2.6.3(@types/react@19.0.1)(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-dialog@1.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5436,6 +6352,25 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-direction@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5449,6 +6384,21 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5470,6 +6420,12 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
@@ -5481,6 +6437,48 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-form@0.1.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-hover-card@1.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5509,6 +6507,13 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-id@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-label@2.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -5518,6 +6523,41 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-label@2.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-menu@2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ aria-hidden: 1.2.4
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ react-remove-scroll: 2.6.3(@types/react@19.0.1)(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-menu@2.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5544,6 +6584,24 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-menubar@1.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5562,6 +6620,28 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-navigation-menu@1.2.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5584,6 +6664,65 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ aria-hidden: 1.2.4
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ react-remove-scroll: 2.6.3(@types/react@19.0.1)(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-popover@1.1.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5625,6 +6764,24 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/rect': 1.1.1
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-portal@1.1.4(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -5635,6 +6792,16 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
@@ -5645,6 +6812,16 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-primitive@2.0.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-slot': 1.1.2(@types/react@19.0.1)(react@19.0.0)
@@ -5654,6 +6831,15 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-progress@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0)
@@ -5664,6 +6850,16 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-progress@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-radio-group@1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5682,6 +6878,41 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-roving-focus@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5699,6 +6930,23 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-scroll-area@1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/number': 1.1.0
@@ -5745,6 +6993,35 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-select@2.2.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ aria-hidden: 1.2.4
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ react-remove-scroll: 2.6.3(@types/react@19.0.1)(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-separator@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -5754,6 +7031,15 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-separator@1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-slider@1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/number': 1.1.0
@@ -5773,6 +7059,25 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-slider@1.3.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-slot@1.1.2(@types/react@19.0.1)(react@19.0.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
@@ -5780,6 +7085,13 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-slot@1.2.3(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-switch@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5795,6 +7107,37 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-switch@1.2.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-tabs@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5811,6 +7154,26 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-toast@1.2.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-toast@1.2.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5831,6 +7194,21 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-toggle-group@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5846,6 +7224,17 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-toggle@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5857,6 +7246,21 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-tooltip@1.1.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.1
@@ -5877,12 +7281,38 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0)
@@ -5890,6 +7320,21 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0)
@@ -5897,18 +7342,44 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
+ '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ use-sync-external-store: 1.5.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-use-previous@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-use-rect@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
'@radix-ui/rect': 1.1.0
@@ -5916,6 +7387,13 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-use-size@1.1.0(@types/react@19.0.1)(react@19.0.0)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0)
@@ -5923,6 +7401,13 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.1
+
'@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -5932,8 +7417,19 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
'@radix-ui/rect@1.1.0': {}
+ '@radix-ui/rect@1.1.1': {}
+
'@reach/observe-rect@1.2.0': {}
'@rollup/plugin-commonjs@28.0.1(rollup@4.35.0)':
@@ -6650,6 +8146,8 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ ansi-colors@4.1.3: {}
+
ansi-escapes@7.0.0:
dependencies:
environment: 1.1.0
@@ -6784,10 +8282,29 @@ snapshots:
buffer-from@1.1.2: {}
+ bundle-name@4.1.0:
+ dependencies:
+ run-applescript: 7.1.0
+
busboy@1.6.0:
dependencies:
streamsearch: 1.1.0
+ c12@3.3.0:
+ dependencies:
+ chokidar: 4.0.3
+ confbox: 0.2.2
+ defu: 6.1.4
+ dotenv: 17.2.3
+ exsolve: 1.0.7
+ giget: 2.0.0
+ jiti: 2.6.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.0.0
+ pkg-types: 2.3.0
+ rc9: 2.1.2
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -6833,8 +8350,16 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
chrome-trace-event@1.0.4: {}
+ citty@0.1.6:
+ dependencies:
+ consola: 3.4.2
+
cjs-module-lexer@1.4.3: {}
class-variance-authority@0.7.1:
@@ -6877,6 +8402,8 @@ snapshots:
color-name: 1.1.4
simple-swizzle: 0.2.2
+ color-support@1.1.3: {}
+
color@4.2.3:
dependencies:
color-convert: 2.0.1
@@ -6884,6 +8411,8 @@ snapshots:
colorette@2.0.20: {}
+ commander@13.0.0: {}
+
commander@13.1.0: {}
commander@2.20.3: {}
@@ -6892,9 +8421,11 @@ snapshots:
concat-map@0.0.1: {}
- convert-source-map@2.0.0: {}
+ confbox@0.2.2: {}
- cookie@1.0.2: {}
+ consola@3.4.2: {}
+
+ convert-source-map@2.0.0: {}
cross-spawn@7.0.6:
dependencies:
@@ -6978,19 +8509,30 @@ snapshots:
deep-is@0.1.4: {}
+ default-browser-id@5.0.0: {}
+
+ default-browser@5.2.1:
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
+ define-lazy-prop@3.0.0: {}
+
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
- dequal@2.0.3: {}
+ defu@6.1.4: {}
+
+ destr@2.0.5: {}
detect-libc@2.0.3: {}
@@ -7016,13 +8558,10 @@ snapshots:
'@babel/runtime': 7.27.0
csstype: 3.1.3
- dot-case@3.0.4:
- dependencies:
- no-case: 3.0.4
- tslib: 2.8.1
-
dotenv@16.5.0: {}
+ dotenv@17.2.3: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -7154,8 +8693,8 @@ snapshots:
'@typescript-eslint/parser': 8.28.0(eslint@8.48.0)(typescript@5.7.2)
eslint: 8.48.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0)
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0))(eslint@8.48.0)
+ eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@8.48.0)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.0)(eslint@8.48.0)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.48.0)
eslint-plugin-react: 7.37.4(eslint@8.48.0)
eslint-plugin-react-hooks: 5.2.0(eslint@8.48.0)
@@ -7174,7 +8713,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0):
+ eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@8.48.0):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
@@ -7185,22 +8724,22 @@ snapshots:
tinyglobby: 0.2.12
unrs-resolver: 1.3.2
optionalDependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0))(eslint@8.48.0)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.0)(eslint@8.48.0)
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0))(eslint@8.48.0):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@8.48.0):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.28.0(eslint@8.48.0)(typescript@5.7.2)
eslint: 8.48.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0)
+ eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@8.48.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0))(eslint@8.48.0):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.0)(eslint@8.48.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -7211,7 +8750,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.48.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint@8.48.0))(eslint@8.48.0))(eslint@8.48.0)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.28.0(eslint@8.48.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@8.48.0)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -7370,6 +8909,8 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
+ exsolve@1.0.7: {}
+
fast-deep-equal@3.1.3: {}
fast-equals@2.0.4: {}
@@ -7502,6 +9043,15 @@ snapshots:
dependencies:
resolve-pkg-maps: 1.0.0
+ giget@2.0.0:
+ dependencies:
+ citty: 0.1.6
+ consola: 3.4.2
+ defu: 6.1.4
+ node-fetch-native: 1.6.7
+ nypm: 0.6.2
+ pathe: 2.0.3
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -7554,6 +9104,15 @@ snapshots:
graphemer@1.4.0: {}
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
@@ -7679,6 +9238,8 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
+ is-docker@3.0.0: {}
+
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@@ -7702,6 +9263,10 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
is-map@2.0.3: {}
is-number-object@1.1.1:
@@ -7758,6 +9323,10 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-wsl@3.1.0:
+ dependencies:
+ is-inside-container: 1.0.0
+
isarray@2.0.5: {}
isexe@2.0.0: {}
@@ -7779,7 +9348,7 @@ snapshots:
jiti@2.4.2: {}
- js-cookie@3.0.5: {}
+ jiti@2.6.1: {}
js-tokens@4.0.0: {}
@@ -7933,10 +9502,6 @@ snapshots:
dependencies:
js-tokens: 4.0.0
- lower-case@2.0.2:
- dependencies:
- tslib: 2.8.1
-
lru-cache@10.4.3: {}
lru-cache@5.1.1:
@@ -7955,8 +9520,6 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
- map-obj@4.3.0: {}
-
match-sorter@8.0.0:
dependencies:
'@babel/runtime': 7.27.0
@@ -8074,10 +9637,7 @@ snapshots:
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
- no-case@3.0.4:
- dependencies:
- lower-case: 2.0.2
- tslib: 2.8.1
+ node-fetch-native@1.6.7: {}
node-fetch@2.7.0:
dependencies:
@@ -8100,6 +9660,14 @@ snapshots:
optionalDependencies:
next: 15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ nypm@0.6.2:
+ dependencies:
+ citty: 0.1.6
+ consola: 3.4.2
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ tinyexec: 1.0.1
+
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
@@ -8144,6 +9712,8 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ ohash@2.0.11: {}
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -8156,6 +9726,13 @@ snapshots:
dependencies:
mimic-function: 5.0.1
+ open@10.1.2:
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.0
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -8200,6 +9777,10 @@ snapshots:
path-type@4.0.0: {}
+ pathe@2.0.3: {}
+
+ perfect-debounce@2.0.0: {}
+
pg-int8@1.0.1: {}
pg-protocol@1.10.0: {}
@@ -8220,6 +9801,12 @@ snapshots:
pidtree@0.6.0: {}
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.2
+ exsolve: 1.0.7
+ pathe: 2.0.3
+
possible-typed-array-names@1.1.0: {}
postcss@8.4.31:
@@ -8266,10 +9853,78 @@ snapshots:
queue-microtask@1.2.3: {}
+ radix-ui@1.4.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-form': 0.1.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-select': 2.2.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.2(@types/react@19.0.1)
+
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
+ rc9@2.1.2:
+ dependencies:
+ defu: 6.1.4
+ destr: 2.0.5
+
react-day-picker@8.10.1(date-fns@4.1.0)(react@19.0.0):
dependencies:
date-fns: 4.1.0
@@ -8363,6 +10018,8 @@ snapshots:
dependencies:
picomatch: 2.3.1
+ readdirp@4.1.2: {}
+
recharts-scale@0.4.5:
dependencies:
decimal.js-light: 2.5.1
@@ -8474,6 +10131,8 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.35.0
fsevents: 2.3.3
+ run-applescript@7.1.0: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -8512,15 +10171,12 @@ snapshots:
semver@7.7.1: {}
- semver@7.7.2:
- optional: true
+ semver@7.7.2: {}
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
- server-only@0.0.1: {}
-
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -8653,17 +10309,6 @@ snapshots:
ansi-styles: 6.2.1
is-fullwidth-code-point: 5.0.0
- snake-case@3.0.4:
- dependencies:
- dot-case: 3.0.4
- tslib: 2.8.1
-
- snakecase-keys@8.0.1:
- dependencies:
- map-obj: 4.3.0
- snake-case: 3.0.4
- type-fest: 4.39.0
-
sonner@1.7.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
react: 19.0.0
@@ -8688,8 +10333,6 @@ snapshots:
dependencies:
type-fest: 0.7.1
- std-env@3.8.1: {}
-
streamsearch@1.1.0: {}
string-argv@0.3.2: {}
@@ -8781,12 +10424,6 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- swr@2.3.3(react@19.0.0):
- dependencies:
- dequal: 2.0.3
- react: 19.0.0
- use-sync-external-store: 1.5.0(react@19.0.0)
-
tailwind-merge@3.0.2: {}
tailwindcss-animate@1.0.7(tailwindcss@4.0.17):
@@ -8817,6 +10454,8 @@ snapshots:
tiny-invariant@1.3.3: {}
+ tinyexec@1.0.1: {}
+
tinyglobby@0.2.12:
dependencies:
fdir: 6.4.3(picomatch@4.0.2)
@@ -8855,8 +10494,6 @@ snapshots:
type-fest@0.7.1: {}
- type-fest@4.39.0: {}
-
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -8892,6 +10529,9 @@ snapshots:
typescript@5.7.2: {}
+ uglify-js@3.19.3:
+ optional: true
+
unbox-primitive@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -9079,6 +10719,8 @@ snapshots:
word-wrap@1.2.5: {}
+ wordwrap@1.0.0: {}
+
wrap-ansi@9.0.0:
dependencies:
ansi-styles: 6.2.1
diff --git a/src/ASPBaseOIDC.Web.Ui/src/app/dashboard/page.tsx b/src/ASPBaseOIDC.Web.Ui/src/app/dashboard/page.tsx
index 918c315..182fdc3 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/app/dashboard/page.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/app/dashboard/page.tsx
@@ -1,12 +1,6 @@
-import { auth } from '@clerk/nextjs/server';
import { redirect } from 'next/navigation';
-export default async function Dashboard() {
- const { userId } = await auth();
-
- if (!userId) {
- return redirect('/auth/sign-in');
- } else {
- redirect('/dashboard/overview');
- }
+export default function Dashboard() {
+ // Middleware will handle authentication redirect
+ redirect('/dashboard/overview');
}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/app/login/page.tsx b/src/ASPBaseOIDC.Web.Ui/src/app/login/page.tsx
new file mode 100644
index 0000000..683c344
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/app/login/page.tsx
@@ -0,0 +1,162 @@
+"use client";
+
+import { Logo } from "@/components/logo";
+import { Button } from "@/components/ui/button";
+import {
+ Form,
+ FormControl,
+ FormField,
+ FormItem,
+ FormLabel,
+ FormMessage,
+} from "@/components/ui/form";
+import { Input } from "@/components/ui/input";
+import { Separator } from "@/components/ui/separator";
+import { zodResolver } from "@hookform/resolvers/zod";
+import Link from "next/link";
+import { useForm } from "react-hook-form";
+import { z } from "zod";
+
+const formSchema = z.object({
+ email: z.string().email(),
+ password: z.string().min(8, "Password must be at least 8 characters long"),
+});
+
+const Login04Page = () => {
+ const form = useForm>({
+ defaultValues: {
+ email: "",
+ password: "",
+ },
+ resolver: zodResolver(formSchema),
+ });
+
+ const onSubmit = (data: z.infer) => {
+ console.log(data);
+ };
+
+ return (
+
+
+
+
+
+ Log in to Shadcn UI Blocks
+
+
+
+
+ Continue with Google
+
+
+
+
+ OR
+
+
+
+
+
+
+
+
+ Forgot your password?
+
+
+ Don't have an account?
+
+ Create account
+
+
+
+
+
+
+
+ );
+};
+
+const GoogleLogo = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export default Login04Page;
diff --git a/src/ASPBaseOIDC.Web.Ui/src/app/page.tsx b/src/ASPBaseOIDC.Web.Ui/src/app/page.tsx
index b904315..b82ad51 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/app/page.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/app/page.tsx
@@ -1,12 +1,6 @@
-import { auth } from '@clerk/nextjs/server';
import { redirect } from 'next/navigation';
-export default async function Page() {
- const { userId } = await auth();
-
- if (!userId) {
- return redirect('/auth/sign-in');
- } else {
- redirect('/dashboard/overview');
- }
+export default function Page() {
+ // Middleware will handle authentication redirect
+ redirect('/dashboard/overview');
}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/config.ts b/src/ASPBaseOIDC.Web.Ui/src/components/config.ts
new file mode 100644
index 0000000..5b94829
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/config.ts
@@ -0,0 +1,11 @@
+export const config = {
+ appUrl:
+ process.env.NODE_ENV === "production"
+ ? process.env.VERCEL_PROJECT_PRODUCTION_URL ??
+ process.env.NEXT_PUBLIC_APP_URL!
+ : "localhost:3000",
+ social: {
+ github: "https://github.com/akash3444/shadcn-ui-blocks",
+ twitter: "https://twitter.com/shadcnui_blocks",
+ },
+};
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/layout/app-sidebar.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/layout/app-sidebar.tsx
index cdda393..c286a31 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/layout/app-sidebar.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/layout/app-sidebar.tsx
@@ -31,7 +31,7 @@ import {
import { UserAvatarProfile } from '@/components/user-avatar-profile';
import { navItems } from '@/constants/data';
import { useMediaQuery } from '@/hooks/use-media-query';
-import { useUser } from '@clerk/nextjs';
+import { useAuth } from '@/contexts/auth-context';
import {
IconBell,
IconChevronRight,
@@ -41,7 +41,6 @@ import {
IconPhotoUp,
IconUserCircle
} from '@tabler/icons-react';
-import { SignOutButton } from '@clerk/nextjs';
import Link from 'next/link';
import { usePathname, useRouter } from 'next/navigation';
import * as React from 'react';
@@ -62,7 +61,7 @@ const tenants = [
export default function AppSidebar() {
const pathname = usePathname();
const { isOpen } = useMediaQuery();
- const { user } = useUser();
+ const { user, logout } = useAuth();
const router = useRouter();
const handleSwitchTenant = (_tenantId: string) => {
// Tenant switching functionality would be implemented here
@@ -198,9 +197,9 @@ export default function AppSidebar() {
-
+
-
+ Sign Out
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/layout/providers.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/layout/providers.tsx
index f7063e6..03a5f35 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/layout/providers.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/layout/providers.tsx
@@ -1,8 +1,6 @@
'use client';
-import { ClerkProvider } from '@clerk/nextjs';
-import { dark } from '@clerk/themes';
-import { useTheme } from 'next-themes';
import React from 'react';
+import { AuthProvider } from '@/contexts/auth-context';
import { ActiveThemeProvider } from '../active-theme';
export default function Providers({
@@ -12,19 +10,10 @@ export default function Providers({
activeThemeValue: string;
children: React.ReactNode;
}) {
- // we need the resolvedTheme value to set the baseTheme for clerk based on the dark or light theme
- const { resolvedTheme } = useTheme();
-
return (
<>
-
- {children}
-
+ {children}
>
);
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/layout/user-nav.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/layout/user-nav.tsx
index dc200cc..90a752e 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/layout/user-nav.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/layout/user-nav.tsx
@@ -10,11 +10,13 @@ import {
DropdownMenuTrigger
} from '@/components/ui/dropdown-menu';
import { UserAvatarProfile } from '@/components/user-avatar-profile';
-import { SignOutButton, useUser } from '@clerk/nextjs';
+import { useAuth } from '@/contexts/auth-context';
import { useRouter } from 'next/navigation';
+
export function UserNav() {
- const { user } = useUser();
+ const { user, logout } = useAuth();
const router = useRouter();
+
if (user) {
return (
@@ -35,7 +37,7 @@ export function UserNav() {
{user.fullName}
- {user.emailAddresses[0].emailAddress}
+ {user.emailAddresses[0]?.emailAddress}
@@ -49,8 +51,8 @@ export function UserNav() {
New Team
-
-
+
+ Sign Out
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/logo.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/logo.tsx
new file mode 100644
index 0000000..eb4be4d
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/logo.tsx
@@ -0,0 +1,14 @@
+"use client";
+
+import { cn } from "@/lib/utils";
+
+export const Logo = ({ className, ...props }: React.ComponentProps<"img">) => {
+ return (
+
+ );
+};
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/ui/button.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/ui/button.tsx
index 367e3be..44d2a42 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/ui/button.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/ui/button.tsx
@@ -1,8 +1,8 @@
-import * as React from 'react';
-import { Slot } from '@radix-ui/react-slot';
-import { cva, type VariantProps } from 'class-variance-authority';
+import * as React from "react"
+import { Slot as SlotPrimitive } from "radix-ui"
+import { cva, type VariantProps } from "class-variance-authority"
-import { cn } from '@/lib/utils';
+import { cn } from "@/lib/utils"
const buttonVariants = cva(
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
@@ -10,30 +10,30 @@ const buttonVariants = cva(
variants: {
variant: {
default:
- 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
+ "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
destructive:
- 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
+ "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
outline:
- 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
secondary:
- 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
ghost:
- 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
- link: 'text-primary underline-offset-4 hover:underline'
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
+ link: "text-primary underline-offset-4 hover:underline",
},
size: {
- default: 'h-9 px-4 py-2 has-[>svg]:px-3',
- sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',
- lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
- icon: 'size-9'
- }
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+ icon: "size-9",
+ },
},
defaultVariants: {
- variant: 'default',
- size: 'default'
- }
+ variant: "default",
+ size: "default",
+ },
}
-);
+)
function Button({
className,
@@ -41,19 +41,19 @@ function Button({
size,
asChild = false,
...props
-}: React.ComponentProps<'button'> &
+}: React.ComponentProps<"button"> &
VariantProps & {
- asChild?: boolean;
+ asChild?: boolean
}) {
- const Comp = asChild ? Slot : 'button';
+ const Comp = asChild ? SlotPrimitive.Slot : "button"
return (
- );
+ )
}
-export { Button, buttonVariants };
+export { Button, buttonVariants }
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/ui/form.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/ui/form.tsx
index e05c152..4618c88 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/ui/form.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/ui/form.tsx
@@ -1,41 +1,22 @@
-'use client';
+"use client";
+
+import * as React from "react";
+import { Label as LabelPrimitive, Slot as SlotPrimitive } from "radix-ui";
-import * as React from 'react';
-import * as LabelPrimitive from '@radix-ui/react-label';
-import { Slot } from '@radix-ui/react-slot';
import {
Controller,
FormProvider,
useFormContext,
- UseFormReturn,
useFormState,
type ControllerProps,
type FieldPath,
- type FieldValues
-} from 'react-hook-form';
+ type FieldValues,
+} from "react-hook-form";
-import { cn } from '@/lib/utils';
-import { Label } from '@/components/ui/label';
+import { cn } from "@/lib/utils";
+import { Label } from "@/components/ui/label";
-const Form = ({
- children,
- onSubmit,
- form,
- className
-}: {
- children: React.ReactNode;
- onSubmit: (data: any) => void;
- form: UseFormReturn;
- className?: string;
-}) => {
- return (
-
-
-
- );
-};
+const Form = FormProvider;
type FormFieldContextValue<
TFieldValues extends FieldValues = FieldValues,
@@ -69,7 +50,7 @@ const useFormField = () => {
const fieldState = getFieldState(fieldContext.name, formState);
if (!fieldContext) {
- throw new Error('useFormField should be used within ');
+ throw new Error("useFormField should be used within ");
}
const { id } = itemContext;
@@ -80,7 +61,7 @@ const useFormField = () => {
formItemId: `${id}-form-item`,
formDescriptionId: `${id}-form-item-description`,
formMessageId: `${id}-form-item-message`,
- ...fieldState
+ ...fieldState,
};
};
@@ -92,14 +73,14 @@ const FormItemContext = React.createContext(
{} as FormItemContextValue
);
-function FormItem({ className, ...props }: React.ComponentProps<'div'>) {
+function FormItem({ className, ...props }: React.ComponentProps<"div">) {
const id = React.useId();
return (
@@ -114,22 +95,22 @@ function FormLabel({
return (
);
}
-function FormControl({ ...props }: React.ComponentProps) {
+function FormControl({ ...props }: React.ComponentProps) {
const { error, formItemId, formDescriptionId, formMessageId } =
useFormField();
return (
- ) {
);
}
-function FormDescription({ className, ...props }: React.ComponentProps<'p'>) {
+function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
const { formDescriptionId } = useFormField();
return (
);
}
-function FormMessage({ className, ...props }: React.ComponentProps<'p'>) {
+function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
const { error, formMessageId } = useFormField();
- const body = error ? String(error?.message ?? '') : props.children;
+ const body = error ? String(error?.message ?? "") : props.children;
if (!body) {
return null;
@@ -165,9 +146,9 @@ function FormMessage({ className, ...props }: React.ComponentProps<'p'>) {
return (
{body}
@@ -183,5 +164,5 @@ export {
FormControl,
FormDescription,
FormMessage,
- FormField
+ FormField,
};
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/ui/input.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/ui/input.tsx
index b4217a4..03295ca 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/ui/input.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/ui/input.tsx
@@ -1,21 +1,21 @@
-import * as React from 'react';
+import * as React from "react"
-import { cn } from '@/lib/utils';
+import { cn } from "@/lib/utils"
-function Input({ className, type, ...props }: React.ComponentProps<'input'>) {
+function Input({ className, type, ...props }: React.ComponentProps<"input">) {
return (
- );
+ )
}
-export { Input };
+export { Input }
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/ui/label.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/ui/label.tsx
index c9c13de..1ac80f7 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/ui/label.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/ui/label.tsx
@@ -1,9 +1,9 @@
-'use client';
+"use client"
-import * as React from 'react';
-import * as LabelPrimitive from '@radix-ui/react-label';
+import * as React from "react"
+import { Label as LabelPrimitive } from "radix-ui"
-import { cn } from '@/lib/utils';
+import { cn } from "@/lib/utils"
function Label({
className,
@@ -11,14 +11,14 @@ function Label({
}: React.ComponentProps) {
return (
- );
+ )
}
-export { Label };
+export { Label }
diff --git a/src/ASPBaseOIDC.Web.Ui/src/components/ui/separator.tsx b/src/ASPBaseOIDC.Web.Ui/src/components/ui/separator.tsx
index b40a986..4c24b2a 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/components/ui/separator.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/components/ui/separator.tsx
@@ -1,28 +1,28 @@
-'use client';
+"use client"
-import * as React from 'react';
-import * as SeparatorPrimitive from '@radix-ui/react-separator';
+import * as React from "react"
+import { Separator as SeparatorPrimitive } from "radix-ui"
-import { cn } from '@/lib/utils';
+import { cn } from "@/lib/utils"
function Separator({
className,
- orientation = 'horizontal',
+ orientation = "horizontal",
decorative = true,
...props
}: React.ComponentProps) {
return (
- );
+ )
}
-export { Separator };
+export { Separator }
diff --git a/src/ASPBaseOIDC.Web.Ui/src/contexts/auth-context.tsx b/src/ASPBaseOIDC.Web.Ui/src/contexts/auth-context.tsx
new file mode 100644
index 0000000..04b1cb9
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/contexts/auth-context.tsx
@@ -0,0 +1,162 @@
+'use client';
+
+import { client } from '@/lib/api/client';
+import {
+ clearAuthToken,
+ getAuthToken,
+ getUserInfo,
+ isAuthenticated,
+ setAuthTokens,
+ setUserInfo,
+ type AuthTokens,
+ type UserInfo
+} from '@/lib/auth';
+import { useRouter } from 'next/navigation';
+import {
+ createContext,
+ useCallback,
+ useContext,
+ useEffect,
+ useState,
+ type ReactNode
+} from 'react';
+
+interface User {
+ id: number;
+ userName: string;
+ name?: string;
+ surname?: string;
+ emailAddress?: string;
+ fullName?: string;
+ imageUrl?: string;
+ emailAddresses: Array<{ emailAddress: string }>;
+}
+
+interface AuthContextType {
+ user: User | null;
+ isLoading: boolean;
+ isAuthenticated: boolean;
+ login: (
+ userNameOrEmailAddress: string,
+ password: string
+ ) => Promise;
+ logout: () => void;
+ refreshUser: () => Promise;
+}
+
+const AuthContext = createContext(undefined);
+
+export function AuthProvider({ children }: { children: ReactNode }) {
+ const [user, setUser] = useState(null);
+ const [isLoading, setIsLoading] = useState(true);
+ const router = useRouter();
+
+ // Load user from localStorage on mount
+ useEffect(() => {
+ const loadUser = () => {
+ if (isAuthenticated()) {
+ const userInfo = getUserInfo();
+ if (userInfo) {
+ setUser(mapUserInfoToUser(userInfo));
+ }
+ }
+ setIsLoading(false);
+ };
+
+ loadUser();
+ }, []);
+
+ const mapUserInfoToUser = (userInfo: UserInfo): User => {
+ const fullName = [userInfo.name, userInfo.surname]
+ .filter(Boolean)
+ .join(' ');
+
+ return {
+ id: userInfo.id,
+ userName: userInfo.userName,
+ name: userInfo.name,
+ surname: userInfo.surname,
+ emailAddress: userInfo.emailAddress,
+ fullName: fullName || userInfo.userName,
+ imageUrl: undefined, // Could be fetched from backend if available
+ emailAddresses: userInfo.emailAddress
+ ? [{ emailAddress: userInfo.emailAddress }]
+ : []
+ };
+ };
+
+ const login = useCallback(
+ async (userNameOrEmailAddress: string, password: string) => {
+ try {
+ const response = await client.POST('/api/TokenAuth/Authenticate', {
+ body: {
+ userNameOrEmailAddress,
+ password,
+ rememberClient: false
+ }
+ });
+
+ if (response.data) {
+ // Save tokens
+ setAuthTokens({
+ accessToken: response.data.accessToken || '',
+ encryptedAccessToken: response.data.encryptedAccessToken || '',
+ expireInSeconds: response.data.expireInSeconds || 0
+ });
+
+ // Save user info
+ const userInfo: UserInfo = {
+ id: response.data.userId || 0,
+ userName: userNameOrEmailAddress,
+ emailAddress: undefined, // Will need to fetch from user profile endpoint
+ name: undefined,
+ surname: undefined
+ };
+
+ setUserInfo(userInfo);
+ setUser(mapUserInfoToUser(userInfo));
+
+ // Redirect to dashboard
+ router.push('/dashboard/overview');
+ }
+ } catch (error) {
+ console.error('Login failed:', error);
+ throw error;
+ }
+ },
+ [router]
+ );
+
+ const logout = useCallback(() => {
+ clearAuthToken();
+ setUser(null);
+ router.push('/auth/sign-in');
+ }, [router]);
+
+ const refreshUser = useCallback(async () => {
+ // Optionally fetch updated user info from backend
+ const userInfo = getUserInfo();
+ if (userInfo) {
+ setUser(mapUserInfoToUser(userInfo));
+ }
+ }, []);
+
+ const value: AuthContextType = {
+ user,
+ isLoading,
+ isAuthenticated: !!user,
+ login,
+ logout,
+ refreshUser
+ };
+
+ return {children} ;
+}
+
+export function useAuth() {
+ const context = useContext(AuthContext);
+ if (context === undefined) {
+ throw new Error('useAuth must be used within an AuthProvider');
+ }
+ return context;
+}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/custom-sign-in-form.tsx b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/custom-sign-in-form.tsx
new file mode 100644
index 0000000..a26287b
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/custom-sign-in-form.tsx
@@ -0,0 +1,108 @@
+'use client';
+
+import { Button } from '@/components/ui/button';
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardHeader,
+ CardTitle
+} from '@/components/ui/card';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import { useAuth } from '@/contexts/auth-context';
+import { useState } from 'react';
+import { toast } from 'sonner';
+
+export function CustomSignInForm() {
+ const { login } = useAuth();
+ const [isLoading, setIsLoading] = useState(false);
+ const [formData, setFormData] = useState({
+ userNameOrEmailAddress: '',
+ password: ''
+ });
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ setIsLoading(true);
+
+ try {
+ await login(formData.userNameOrEmailAddress, formData.password);
+ toast.success('Successfully signed in!');
+ } catch (error: any) {
+ console.error('Login error:', error);
+ toast.error(error.message || 'Failed to sign in. Please check your credentials.');
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ return (
+
+
+ Sign In
+
+ Enter your credentials to access your account
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/custom-sign-up-form.tsx b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/custom-sign-up-form.tsx
new file mode 100644
index 0000000..8eee70a
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/custom-sign-up-form.tsx
@@ -0,0 +1,191 @@
+'use client';
+
+import { Button } from '@/components/ui/button';
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardHeader,
+ CardTitle
+} from '@/components/ui/card';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import { client } from '@/lib/api/client';
+import { useRouter } from 'next/navigation';
+import { useState } from 'react';
+import { toast } from 'sonner';
+
+export function CustomSignUpForm() {
+ const router = useRouter();
+ const [isLoading, setIsLoading] = useState(false);
+ const [formData, setFormData] = useState({
+ userName: '',
+ name: '',
+ surname: '',
+ emailAddress: '',
+ password: '',
+ confirmPassword: ''
+ });
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+
+ // Validation
+ if (formData.password !== formData.confirmPassword) {
+ toast.error('Passwords do not match');
+ return;
+ }
+
+ if (formData.password.length < 8) {
+ toast.error('Password must be at least 8 characters long');
+ return;
+ }
+
+ setIsLoading(true);
+
+ try {
+ await client.POST('/api/services/app/Account/Register', {
+ body: {
+ userName: formData.userName,
+ name: formData.name,
+ surname: formData.surname,
+ emailAddress: formData.emailAddress,
+ password: formData.password
+ }
+ });
+
+ toast.success('Account created successfully! Please sign in.');
+ router.push('/auth/sign-in');
+ } catch (error: any) {
+ console.error('Registration error:', error);
+ toast.error(
+ error.message || 'Failed to create account. Please try again.'
+ );
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ return (
+
+
+ Create an account
+
+ Enter your information to create your account
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-in-view.tsx b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-in-view.tsx
index 98927f5..6f8c268 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-in-view.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-in-view.tsx
@@ -1,27 +1,27 @@
import { buttonVariants } from '@/components/ui/button';
import { cn } from '@/lib/utils';
-import { SignIn as ClerkSignInForm } from '@clerk/nextjs';
+import { CustomSignInForm } from './custom-sign-in-form';
import { GitHubLogoIcon } from '@radix-ui/react-icons';
import { IconStar } from '@tabler/icons-react';
import { Metadata } from 'next';
import Link from 'next/link';
export const metadata: Metadata = {
- title: 'Authentication',
- description: 'Authentication forms built using the components.'
+ title: 'Sign In',
+ description: 'Sign in to your account'
};
export default function SignInViewPage({ stars }: { stars: number }) {
return (
- Login
+ Sign Up
@@ -71,11 +71,8 @@ export default function SignInViewPage({ stars }: { stars: number }) {
{stars}
-
+
+
By clicking continue, you agree to our{' '}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-up-view.tsx b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-up-view.tsx
index 5879c53..4cded83 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-up-view.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/features/auth/components/sign-up-view.tsx
@@ -1,27 +1,27 @@
import { buttonVariants } from '@/components/ui/button';
import { cn } from '@/lib/utils';
-import { SignUp as ClerkSignUpForm } from '@clerk/nextjs';
+import { CustomSignUpForm } from './custom-sign-up-form';
import { GitHubLogoIcon } from '@radix-ui/react-icons';
import { IconStar } from '@tabler/icons-react';
import { Metadata } from 'next';
import Link from 'next/link';
export const metadata: Metadata = {
- title: 'Authentication',
- description: 'Authentication forms built using the components.'
+ title: 'Sign Up',
+ description: 'Create a new account'
};
export default function SignUpViewPage({ stars }: { stars: number }) {
return (
- Sign Up
+ Sign In
@@ -71,11 +71,9 @@ export default function SignUpViewPage({ stars }: { stars: number }) {
{stars}
-
+
+
+
By clicking continue, you agree to our{' '}
{
+ setIsSaving(true);
+ try {
+ // TODO: Call backend API to update user profile
+ // await client.PUT('/api/services/app/User/Update', { body: formData });
+
+ toast.success('Profile updated successfully');
+ await refreshUser();
+ setIsEditing(false);
+ } catch (error: any) {
+ console.error('Update profile error:', error);
+ toast.error(error.message || 'Failed to update profile');
+ } finally {
+ setIsSaving(false);
+ }
+ };
+
+ const handleCancel = () => {
+ setFormData({
+ name: user?.name || '',
+ surname: user?.surname || '',
+ emailAddress: user?.emailAddress || ''
+ });
+ setIsEditing(false);
+ };
+
+ return (
+
+
+
+
+ {user.fullName?.slice(0, 2)?.toUpperCase() || 'U'}
+
+
+
+
{user.fullName}
+
{user.emailAddress}
+
+
+
+
+
+
+
+ Profile
+ Security
+ Preferences
+
+
+
+
+
+ Profile Information
+
+ Update your account profile information
+
+
+
+
+
+
+
Username
+
+
+ Username cannot be changed
+
+
+
+
+ Email Address
+
+ setFormData({ ...formData, emailAddress: e.target.value })
+ }
+ disabled={!isEditing || isSaving}
+ />
+
+
+
+ {!isEditing ? (
+ setIsEditing(true)}>
+ Edit Profile
+
+ ) : (
+ <>
+
+ Cancel
+
+
+ {isSaving ? 'Saving...' : 'Save Changes'}
+
+ >
+ )}
+
+
+
+
+
+
+
+
+ Change Password
+
+ Update your password to keep your account secure
+
+
+
+
+ Current Password
+
+
+
+
+ New Password
+
+
+
+
+ Confirm New Password
+
+
+
+
+ Update Password
+
+
+
+
+
+
+
+
+ Preferences
+ Manage your account preferences
+
+
+
+ Preferences settings coming soon...
+
+
+
+
+
+
+ );
+}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/features/profile/components/profile-view-page.tsx b/src/ASPBaseOIDC.Web.Ui/src/features/profile/components/profile-view-page.tsx
index b4a8ec7..fe0126b 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/features/profile/components/profile-view-page.tsx
+++ b/src/ASPBaseOIDC.Web.Ui/src/features/profile/components/profile-view-page.tsx
@@ -1,9 +1,9 @@
-import { UserProfile } from '@clerk/nextjs';
+import { CustomUserProfile } from './custom-user-profile';
export default function ProfileViewPage() {
return (
-
+
);
}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/lib/api/README.md b/src/ASPBaseOIDC.Web.Ui/src/lib/api/README.md
new file mode 100644
index 0000000..3e15681
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/lib/api/README.md
@@ -0,0 +1,224 @@
+# API Client Usage Guide
+
+This directory contains the configured API client for communicating with the ASP.NET Boilerplate backend.
+
+## Setup
+
+### 1. Start the backend
+
+```bash
+cd ../../ASPBaseOIDC.Web.Host
+dotnet run
+```
+
+The backend should be running at `https://localhost:44313`
+
+### 2. Generate types from OpenAPI
+
+```bash
+pnpm generate:api
+```
+
+This will:
+1. Download the OpenAPI spec from `https://localhost:44313/swagger/v1/swagger.json` to a local file
+2. Generate TypeScript types in `src/client/` from the local file
+3. Create a type-safe client with all your backend endpoints
+
+**Note:** We use a local file instead of fetching directly from the HTTPS URL to avoid SSL certificate issues with localhost.
+
+**Alternative commands:**
+- `pnpm generate:api:download` - Only download the swagger.json file
+- `pnpm generate:api:types` - Only generate types from existing swagger.json
+
+### 3. Use the client in your components
+
+## Usage Examples
+
+### Server Component (recommended)
+
+```typescript
+// app/dashboard/users/page.tsx
+import { client } from '@/lib/api/client';
+
+export default async function UsersPage() {
+ // Fully type-safe API call
+ const response = await client.GET('/api/services/app/User/GetAll', {
+ params: {
+ query: {
+ maxResultCount: 10,
+ skipCount: 0
+ }
+ }
+ });
+
+ const users = response.data; // TypeScript knows the exact type!
+
+ return (
+
+
Users
+
+ {users?.items?.map(user => (
+ {user.userName}
+ ))}
+
+
+ );
+}
+```
+
+### Client Component
+
+```typescript
+'use client';
+
+import { client } from '@/lib/api/client';
+import { useEffect, useState } from 'react';
+
+export function UsersList() {
+ const [users, setUsers] = useState
([]);
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ async function fetchUsers() {
+ try {
+ const response = await client.GET('/api/services/app/User/GetAll');
+ setUsers(response.data?.items || []);
+ } catch (error) {
+ console.error('Failed to fetch users:', error);
+ } finally {
+ setLoading(false);
+ }
+ }
+
+ fetchUsers();
+ }, []);
+
+ if (loading) return Loading...
;
+
+ return (
+
+ {users.map(user => (
+ {user.userName}
+ ))}
+
+ );
+}
+```
+
+### POST Request Example
+
+```typescript
+import { client } from '@/lib/api/client';
+
+async function createUser(userData: any) {
+ const response = await client.POST('/api/services/app/User/Create', {
+ body: {
+ userName: 'newuser',
+ emailAddress: 'user@example.com',
+ name: 'John',
+ surname: 'Doe',
+ password: 'P@ssw0rd',
+ isActive: true
+ }
+ });
+
+ return response.data;
+}
+```
+
+### Authentication Flow
+
+```typescript
+import { client } from '@/lib/api/client';
+import { setAuthTokens, setUserInfo } from '@/lib/auth';
+
+async function login(userNameOrEmailAddress: string, password: string) {
+ const response = await client.POST('/api/TokenAuth/Authenticate', {
+ body: {
+ userNameOrEmailAddress,
+ password
+ }
+ });
+
+ // Save tokens (client will automatically use them for subsequent requests)
+ setAuthTokens({
+ accessToken: response.data.accessToken,
+ encryptedAccessToken: response.data.encryptedAccessToken,
+ expireInSeconds: response.data.expireInSeconds
+ });
+
+ // Optionally save user info
+ setUserInfo({
+ id: response.data.userId,
+ userName: response.data.userName,
+ emailAddress: response.data.emailAddress
+ });
+
+ return response.data;
+}
+```
+
+## Features
+
+### Automatic Authentication
+The client automatically adds `Authorization: Bearer ` to all requests using the token from `localStorage`.
+
+### Multi-Tenancy Support
+If a tenant ID is set, it's automatically added as `Abp.TenantId` header.
+
+### ABP Response Unwrapping
+ASP.NET Boilerplate wraps responses in this format:
+```json
+{
+ "result": { /* your data */ },
+ "success": true,
+ "error": null,
+ "unAuthorizedRequest": false,
+ "__abp": true
+}
+```
+
+The client automatically extracts `.result` so you work directly with your data.
+
+### Error Handling
+ABP errors are automatically thrown as JavaScript errors:
+```typescript
+try {
+ await client.POST('/api/services/app/User/Create', { body: invalidData });
+} catch (error) {
+ console.error(error.message); // ABP error message
+ console.error(error.validationErrors); // Validation errors if any
+}
+```
+
+### Unauthorized Handling
+If the backend returns `unAuthorizedRequest: true`, the client:
+1. Clears the auth token
+2. Redirects to `/auth/sign-in`
+
+## Configuration
+
+### Environment Variables
+
+Create `.env.local`:
+
+```bash
+NEXT_PUBLIC_API_URL=https://localhost:44313
+```
+
+### Regenerating Types
+
+When your backend DTOs change:
+
+```bash
+pnpm generate:api
+```
+
+This will update all types and ensure type-safety throughout your frontend.
+
+## Tips
+
+1. **Always use the client from `@/lib/api/client`**, not directly from `@/client`
+2. **Server Components** are preferred - they're faster and don't require `useEffect`
+3. **IntelliSense works everywhere** - TypeScript knows all endpoints, params, and responses
+4. **No manual type definitions needed** - everything is auto-generated from your C# DTOs
diff --git a/src/ASPBaseOIDC.Web.Ui/src/lib/api/client.ts b/src/ASPBaseOIDC.Web.Ui/src/lib/api/client.ts
new file mode 100644
index 0000000..0c1d096
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/lib/api/client.ts
@@ -0,0 +1,119 @@
+/**
+ * Configured API client with ASP.NET Boilerplate interceptors
+ *
+ * This client automatically:
+ * - Adds JWT authentication headers
+ * - Adds multi-tenancy headers
+ * - Unwraps ABP response format ({ result, success, error })
+ * - Handles ABP errors
+ *
+ * IMPORTANT: Run `pnpm generate:api` first to generate the client from OpenAPI spec
+ */
+
+import { client } from '@/client/client.gen';
+import { getAuthToken, getTenantId } from '@/lib/auth';
+
+/**
+ * ASP.NET Boilerplate response wrapper
+ */
+interface AbpResponse {
+ result: T;
+ targetUrl: string | null;
+ success: boolean;
+ error: {
+ code: number;
+ message: string;
+ details: string;
+ validationErrors: Array<{
+ message: string;
+ members: string[];
+ }>;
+ } | null;
+ unAuthorizedRequest: boolean;
+ __abp: boolean;
+}
+
+/**
+ * Configure base URL
+ */
+client.setConfig({
+ baseUrl: process.env.NEXT_PUBLIC_API_URL || 'https://localhost:44313',
+});
+
+/**
+ * Request interceptor: Add authentication and tenant headers
+ */
+client.interceptors.request.use((request) => {
+ // Add JWT token
+ const token = getAuthToken();
+ if (token) {
+ request.headers.set('Authorization', `Bearer ${token}`);
+ }
+
+ // Add tenant ID for multi-tenancy
+ const tenantId = getTenantId();
+ if (tenantId) {
+ request.headers.set('Abp.TenantId', tenantId);
+ }
+
+ // Ensure content-type is set
+ if (!request.headers.has('Content-Type')) {
+ request.headers.set('Content-Type', 'application/json');
+ }
+
+ return request;
+});
+
+/**
+ * Response interceptor: Unwrap ABP response format
+ */
+client.interceptors.response.use((response) => {
+ const data = response.data;
+
+ // Check if this is an ABP-wrapped response
+ if (data && typeof data === 'object' && '__abp' in data) {
+ const abpData = data as AbpResponse;
+
+ // Handle errors
+ if (!abpData.success && abpData.error) {
+ const error = new Error(abpData.error.message || 'An error occurred');
+ (error as any).code = abpData.error.code;
+ (error as any).details = abpData.error.details;
+ (error as any).validationErrors = abpData.error.validationErrors;
+ throw error;
+ }
+
+ // Handle unauthorized
+ if (abpData.unAuthorizedRequest) {
+ // Clear auth and redirect to login
+ if (typeof window !== 'undefined') {
+ const { clearAuthToken } = require('@/lib/auth');
+ clearAuthToken();
+ window.location.href = '/auth/sign-in';
+ }
+ throw new Error('Unauthorized request');
+ }
+
+ // Unwrap the result
+ return {
+ ...response,
+ data: abpData.result,
+ };
+ }
+
+ // Return as-is if not ABP format
+ return response;
+});
+
+/**
+ * Export configured client
+ */
+export { client };
+
+/**
+ * Export type-safe client (after generation)
+ * Usage:
+ * import { client } from '@/lib/api/client';
+ * const users = await client.GET('/api/services/app/User/GetAll');
+ */
+export default client;
diff --git a/src/ASPBaseOIDC.Web.Ui/src/lib/auth.ts b/src/ASPBaseOIDC.Web.Ui/src/lib/auth.ts
new file mode 100644
index 0000000..770b968
--- /dev/null
+++ b/src/ASPBaseOIDC.Web.Ui/src/lib/auth.ts
@@ -0,0 +1,111 @@
+/**
+ * Authentication helpers for ASP.NET Boilerplate JWT tokens
+ */
+
+const ACCESS_TOKEN_KEY = 'accessToken';
+const ENCRYPTED_ACCESS_TOKEN_KEY = 'encryptedAccessToken';
+const TENANT_ID_KEY = 'tenantId';
+const USER_INFO_KEY = 'userInfo';
+
+export interface UserInfo {
+ id: number;
+ userName: string;
+ name?: string;
+ surname?: string;
+ emailAddress?: string;
+}
+
+export interface AuthTokens {
+ accessToken: string;
+ encryptedAccessToken: string;
+ expireInSeconds: number;
+}
+
+/**
+ * Get the current access token
+ */
+export function getAuthToken(): string | null {
+ if (typeof window === 'undefined') return null;
+ return localStorage.getItem(ACCESS_TOKEN_KEY);
+}
+
+/**
+ * Get the encrypted access token (used for some ABP operations)
+ */
+export function getEncryptedAuthToken(): string | null {
+ if (typeof window === 'undefined') return null;
+ return localStorage.getItem(ENCRYPTED_ACCESS_TOKEN_KEY);
+}
+
+/**
+ * Set authentication tokens after successful login
+ */
+export function setAuthTokens(tokens: AuthTokens): void {
+ if (typeof window === 'undefined') return;
+
+ localStorage.setItem(ACCESS_TOKEN_KEY, tokens.accessToken);
+ localStorage.setItem(ENCRYPTED_ACCESS_TOKEN_KEY, tokens.encryptedAccessToken);
+}
+
+/**
+ * Clear all authentication data (logout)
+ */
+export function clearAuthToken(): void {
+ if (typeof window === 'undefined') return;
+
+ localStorage.removeItem(ACCESS_TOKEN_KEY);
+ localStorage.removeItem(ENCRYPTED_ACCESS_TOKEN_KEY);
+ localStorage.removeItem(USER_INFO_KEY);
+}
+
+/**
+ * Check if user is authenticated
+ */
+export function isAuthenticated(): boolean {
+ return !!getAuthToken();
+}
+
+/**
+ * Get current tenant ID (for multi-tenancy)
+ */
+export function getTenantId(): string | null {
+ if (typeof window === 'undefined') return null;
+ return localStorage.getItem(TENANT_ID_KEY);
+}
+
+/**
+ * Set tenant ID (for multi-tenancy)
+ */
+export function setTenantId(tenantId: string | number | null): void {
+ if (typeof window === 'undefined') return;
+
+ if (tenantId === null) {
+ localStorage.removeItem(TENANT_ID_KEY);
+ } else {
+ localStorage.setItem(TENANT_ID_KEY, String(tenantId));
+ }
+}
+
+/**
+ * Get stored user information
+ */
+export function getUserInfo(): UserInfo | null {
+ if (typeof window === 'undefined') return null;
+
+ const userInfoStr = localStorage.getItem(USER_INFO_KEY);
+ if (!userInfoStr) return null;
+
+ try {
+ return JSON.parse(userInfoStr) as UserInfo;
+ } catch {
+ return null;
+ }
+}
+
+/**
+ * Set user information
+ */
+export function setUserInfo(userInfo: UserInfo): void {
+ if (typeof window === 'undefined') return;
+ localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo));
+}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/lib/utils.ts b/src/ASPBaseOIDC.Web.Ui/src/lib/utils.ts
index ed0649c..f8c98db 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/lib/utils.ts
+++ b/src/ASPBaseOIDC.Web.Ui/src/lib/utils.ts
@@ -1,26 +1,34 @@
-import { type ClassValue, clsx } from 'clsx';
-import { twMerge } from 'tailwind-merge';
+import { config } from "@/components/config";
+import { clsx, type ClassValue } from "clsx";
+import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
-export function formatBytes(
- bytes: number,
- opts: {
- decimals?: number;
- sizeType?: 'accurate' | 'normal';
- } = {}
-) {
- const { decimals = 0, sizeType = 'normal' } = opts;
-
- const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
- const accurateSizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB'];
- if (bytes === 0) return '0 Byte';
- const i = Math.floor(Math.log(bytes) / Math.log(1024));
- return `${(bytes / Math.pow(1024, i)).toFixed(decimals)} ${
- sizeType === 'accurate'
- ? (accurateSizes[i] ?? 'Bytest')
- : (sizes[i] ?? 'Bytes')
- }`;
+export function capitalize(str: string) {
+ return str.charAt(0).toUpperCase() + str.slice(1);
+}
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+type GroupBy = Record;
+
+export function groupBy(
+ array: T[],
+ key: K
+): GroupBy {
+ return array.reduce((acc, item) => {
+ const keyValue = String(item[key]);
+ if (!acc[keyValue]) {
+ acc[keyValue] = [];
+ }
+ acc[keyValue].push(item);
+ return acc;
+ }, {} as GroupBy);
+}
+
+export function absoluteUrl(path: string) {
+ return process.env.NODE_ENV === "development"
+ ? `http://localhost:3000${path}`
+ : `https://${config.appUrl}${path}`;
}
diff --git a/src/ASPBaseOIDC.Web.Ui/src/middleware.ts b/src/ASPBaseOIDC.Web.Ui/src/middleware.ts
index ee2a40f..32443d7 100644
--- a/src/ASPBaseOIDC.Web.Ui/src/middleware.ts
+++ b/src/ASPBaseOIDC.Web.Ui/src/middleware.ts
@@ -1,11 +1,29 @@
-import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server';
-import { NextRequest } from 'next/server';
+import { NextRequest, NextResponse } from 'next/server';
-const isProtectedRoute = createRouteMatcher(['/dashboard(.*)']);
+export function middleware(request: NextRequest) {
+ const { pathname } = request.nextUrl;
+
+ // Public routes that don't require authentication
+ const publicRoutes = ['/auth/sign-in', '/auth/sign-up', '/auth/forgot-password'];
+ const isPublicRoute = publicRoutes.some((route) => pathname.startsWith(route));
+
+ // Get token from cookie or check localStorage (client-side only)
+ // Note: In middleware, we can only check cookies, not localStorage
+ const token = request.cookies.get('accessToken')?.value;
+
+ // If trying to access protected route without token, redirect to sign-in
+ if (!isPublicRoute && !token && pathname.startsWith('/dashboard')) {
+ return NextResponse.redirect(new URL('/auth/sign-in', request.url));
+ }
+
+ // If authenticated and trying to access auth pages, redirect to dashboard
+ if (isPublicRoute && token) {
+ return NextResponse.redirect(new URL('/dashboard/overview', request.url));
+ }
+
+ return NextResponse.next();
+}
-export default clerkMiddleware(async (auth, req: NextRequest) => {
- if (isProtectedRoute(req)) await auth.protect();
-});
export const config = {
matcher: [
// Skip Next.js internals and all static files, unless found in search params