diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 99a4831..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# @xtr-dev/payload-billing
-
-## 0.1.0 (Initial Release)
-
-### Features
-
-- **Payment Providers**: Initial support for Stripe, Mollie, and Test providers
-- **PayloadCMS Integration**: Pre-configured collections for payments, customers, invoices, and refunds
-- **Test Provider**: Full-featured test payment provider for local development
-- **TypeScript Support**: Complete TypeScript definitions and type safety
-- **Webhook Handling**: Robust webhook processing for all supported providers
-- **Currency Support**: Multi-currency support with validation and formatting utilities
-- **Logging**: Structured logging system for debugging and monitoring
-- **Validation**: Comprehensive data validation using Zod schemas
-
-### Collections
-
-- **Payments**: Track payment status, amounts, and provider-specific data
-- **Customers**: Customer management with billing information and relationships
-- **Invoices**: Invoice generation with line items and status tracking
-- **Refunds**: Refund tracking with relationship to original payments
-
-### Provider Features
-
-#### Test Provider
-- Configurable auto-completion of payments
-- Failure simulation for testing error scenarios
-- Delay simulation for testing async operations
-- In-memory storage for development
-- Full webhook event simulation
-
-#### Extensible Architecture
-- Common provider interface for easy extension
-- Provider registry system
-- Standardized error handling
-- Consistent logging across providers
-
-### Developer Experience
-
-- **Testing**: Comprehensive test suite with Jest
-- **Build System**: Modern build setup with tsup
-- **Linting**: ESLint configuration with TypeScript support
-- **Documentation**: Complete API documentation and usage examples
-- **Development**: Hot reloading and watch mode support
\ No newline at end of file
diff --git a/CLAUDE.md b/CLAUDE.md
deleted file mode 100644
index 16d7ae6..0000000
--- a/CLAUDE.md
+++ /dev/null
@@ -1,166 +0,0 @@
-# PayloadCMS Billing Plugin Development Guidelines
-
-## Project Overview
-
-This is a PayloadCMS plugin that provides billing and payment functionality with flexible customer data management and invoice generation capabilities.
-
-## Architecture Principles
-
-### Core Design
-- **TypeScript First**: Full TypeScript support with strict typing throughout
-- **PayloadCMS Integration**: Deep integration with Payload collections, hooks, and admin UI
-- **Flexible Customer Data**: Support for both relationship-based and embedded customer information
-- **Callback-based Syncing**: Use customer info extractors to keep data in sync
-
-### Collections Structure
-- **Payments**: Core payment tracking with provider-specific data
-- **Customers**: Customer management with billing information (optional)
-- **Invoices**: Invoice generation with embedded customer info and optional customer relationship
-- **Refunds**: Refund tracking and management
-
-## Code Organization
-
-```
-src/
-├── collections/ # PayloadCMS collection configurations
-├── types/ # TypeScript type definitions
-└── index.ts # Main plugin entry point
-```
-
-## Customer Data Management
-
-### Customer Info Extractor Pattern
-
-The plugin uses a callback-based approach to extract customer information from customer relationships:
-
-```typescript
-// Define how to extract customer info from your customer collection
-const customerInfoExtractor: CustomerInfoExtractor = (customer) => ({
- name: customer.name,
- email: customer.email,
- phone: customer.phone,
- company: customer.company,
- taxId: customer.taxId,
- billingAddress: {
- line1: customer.address.line1,
- line2: customer.address.line2,
- city: customer.address.city,
- state: customer.address.state,
- postalCode: customer.address.postalCode,
- country: customer.address.country,
- }
-})
-```
-
-### Invoice Customer Data Options
-
-1. **With Customer Relationship + Extractor**:
- - Customer relationship required
- - Customer info auto-populated and read-only
- - Syncs automatically when customer changes
-
-2. **With Customer Relationship (no extractor)**:
- - Customer relationship optional
- - Customer info manually editable
- - Either relationship OR customer info required
-
-3. **No Customer Collection**:
- - Customer info fields always required and editable
- - No relationship field available
-
-## Plugin Configuration
-
-### Basic Configuration
-```typescript
-import { billingPlugin, defaultCustomerInfoExtractor } from '@xtr-dev/payload-billing'
-
-billingPlugin({
- collections: {
- customers: 'customers', // Customer collection slug
- invoices: 'invoices', // Invoice collection slug
- payments: 'payments', // Payment collection slug
- refunds: 'refunds', // Refund collection slug
- customerRelation: false, // Disable customer relationship
- // OR
- customerRelation: 'clients', // Use custom collection slug
- },
- customerInfoExtractor: defaultCustomerInfoExtractor, // For built-in customer collection
-})
-```
-
-### Custom Customer Info Extractor
-```typescript
-billingPlugin({
- customerInfoExtractor: (customer) => ({
- name: customer.fullName,
- email: customer.contactEmail,
- phone: customer.phoneNumber,
- company: customer.companyName,
- taxId: customer.vatNumber,
- billingAddress: {
- line1: customer.billing.street,
- line2: customer.billing.apartment,
- city: customer.billing.city,
- state: customer.billing.state,
- postalCode: customer.billing.zip,
- country: customer.billing.countryCode,
- }
- })
-})
-```
-
-## Development Guidelines
-
-### TypeScript Guidelines
-- Use strict TypeScript configuration
-- All customer info extractors must implement `CustomerInfoExtractor` interface
-- Ensure consistent camelCase naming for all address fields
-
-### PayloadCMS Integration
-- Follow PayloadCMS plugin patterns and conventions
-- Use proper collection configurations with access control
-- Utilize PayloadCMS hooks for data syncing and validation
-
-### Field Validation Rules
-- When using `customerInfoExtractor`: customer relationship is required, customer info auto-populated
-- When not using extractor: either customer relationship OR customer info must be provided
-- When no customer collection: customer info is always required
-
-## Collections API
-
-### Invoice Collection Features
-- Automatic invoice number generation (INV-{timestamp})
-- Currency validation (3-letter ISO codes)
-- Automatic due date setting (30 days from creation)
-- Line item total calculations
-- Customer info syncing via hooks
-
-### Customer Data Syncing
-The `beforeChange` hook automatically:
-1. Detects when customer relationship changes
-2. Fetches customer data from the related collection
-3. Extracts customer info using the provided callback
-4. Updates invoice with extracted data
-5. Maintains data consistency across updates
-
-## Error Handling
-
-### Validation Errors
-- Customer relationship required when using extractor
-- Customer info required when not using relationship
-- Proper error messages for missing required fields
-
-### Data Extraction Errors
-- Failed customer fetches are logged and throw user-friendly errors
-- Invalid customer data is handled gracefully
-
-## Performance Considerations
-- Customer data is only fetched when relationship changes
-- Read-only fields prevent unnecessary manual edits
-- Efficient hook execution with proper change detection
-
-## Documentation Requirements
-- Document all public APIs with examples
-- Provide clear customer info extractor examples
-- Include configuration guides for different use cases
-- Maintain up-to-date TypeScript documentation
\ No newline at end of file
diff --git a/dev/DEMO_GUIDE.md b/dev/DEMO_GUIDE.md
new file mode 100644
index 0000000..f644161
--- /dev/null
+++ b/dev/DEMO_GUIDE.md
@@ -0,0 +1,223 @@
+# Demo Project Quick Start Guide
+
+This guide will help you quickly get started with the billing plugin demo.
+
+## 🚀 Quick Start
+
+1. **Install dependencies** (if not already done):
+ ```bash
+ pnpm install
+ ```
+
+2. **Start the development server**:
+ ```bash
+ pnpm dev
+ ```
+
+3. **Access the demo**:
+ - Open [http://localhost:3000](http://localhost:3000)
+ - Login with `dev@payloadcms.com` / `test` if prompted
+
+## 🎯 What's Included
+
+### Custom Test Payment UI
+A beautiful, modern payment interface built with React and Tailwind CSS that demonstrates:
+- Payment method selection (iDEAL, Credit Card, PayPal, Apple Pay, Bank Transfer)
+- Test scenario selection (success, failure, cancellation, etc.)
+- Real-time payment status updates
+- Test mode indicators and warnings
+- Responsive design
+
+**Location**: `/dev/app/test-payment/[id]/page.tsx`
+
+### Interactive Demo Page
+A landing page that showcases the plugin features and allows you to:
+- Create test payments with one click
+- Navigate to custom payment UI
+- Access admin collections
+- Learn about the plugin features
+
+**Location**: `/dev/app/page.tsx`
+
+### Customer Management
+Full customer collection with:
+- Name, email, phone, company
+- Tax ID support
+- Complete address fields
+- Auto-sync with invoices via `customerInfoExtractor`
+
+**Location**: Configured in `/dev/payload.config.ts`
+
+### Sample Data
+Comprehensive seed data including:
+- 2 sample customers
+- 2 invoices (1 paid, 1 open)
+- 4 payments (various statuses)
+- 1 refund
+
+**Location**: `/dev/seed.ts`
+
+### Custom API Routes
+Demo API endpoint for creating payments:
+- `POST /api/demo/create-payment`
+
+**Location**: `/dev/app/api/demo/create-payment/route.ts`
+
+## 🧪 Testing the Flow
+
+### Complete Payment Flow Test
+
+1. **Go to the demo page**: [http://localhost:3000](http://localhost:3000)
+
+2. **Click "Create Demo Payment"** - This creates a test payment
+
+3. **Click "Go to Payment Page"** - Opens the custom payment UI
+
+4. **Select a payment method** - Choose any method (e.g., Credit Card)
+
+5. **Select a test scenario** - Try different scenarios:
+ - **Instant Success**: See immediate payment success
+ - **Delayed Success**: See processing indicator, then success
+ - **Declined Payment**: See failure handling
+ - **Cancelled Payment**: See cancellation flow
+
+6. **Click "Process Test Payment"** - Watch the payment process
+
+7. **View in admin** - After success, you'll be redirected to the payments list
+
+### Testing with Different Scenarios
+
+Each scenario simulates a different payment outcome:
+
+| Scenario | Delay | Outcome | Use Case |
+|----------|-------|---------|----------|
+| Instant Success | 0ms | Success | Testing happy path |
+| Delayed Success | 3s | Success | Testing async processing |
+| Cancelled Payment | 1s | Cancelled | Testing user cancellation |
+| Declined Payment | 2s | Failed | Testing payment failures |
+| Expired Payment | 5s | Cancelled | Testing timeout handling |
+| Pending Payment | 1.5s | Pending | Testing long-running payments |
+
+## 📊 Viewing Data
+
+### Admin Collections
+
+After running the demo, explore the seeded data:
+
+1. **Payments** ([http://localhost:3000/admin/collections/payments](http://localhost:3000/admin/collections/payments))
+ - View all payment transactions
+ - See payment statuses and provider data
+ - Check linked invoices
+
+2. **Invoices** ([http://localhost:3000/admin/collections/invoices](http://localhost:3000/admin/collections/invoices))
+ - View generated invoices
+ - See line items and totals
+ - Check customer relationships
+
+3. **Refunds** ([http://localhost:3000/admin/collections/refunds](http://localhost:3000/admin/collections/refunds))
+ - View processed refunds
+ - See refund amounts and reasons
+
+4. **Customers** ([http://localhost:3000/admin/collections/customers](http://localhost:3000/admin/collections/customers))
+ - View customer information
+ - Edit customer details (invoices will auto-update!)
+
+## 🔧 Configuration Highlights
+
+### Plugin Configuration
+```typescript
+billingPlugin({
+ providers: [
+ testProvider({
+ enabled: true,
+ customUiRoute: '/test-payment', // Custom UI route
+ testModeIndicators: {
+ showWarningBanners: true,
+ showTestBadges: true,
+ consoleWarnings: true
+ }
+ })
+ ],
+ collections: {
+ payments: 'payments',
+ invoices: 'invoices',
+ refunds: 'refunds',
+ },
+ customerRelationSlug: 'customers',
+ customerInfoExtractor: (customer) => ({
+ // Auto-extract customer info for invoices
+ name: customer.name,
+ email: customer.email,
+ // ... more fields
+ }),
+})
+```
+
+## 🎨 Customization Ideas
+
+### 1. Modify the Payment UI
+Edit `/dev/app/test-payment/[id]/page.tsx` to:
+- Change colors and styling
+- Add your brand logo
+- Modify the layout
+- Add additional fields
+
+### 2. Add More Test Scenarios
+Edit `testProvider` config to add custom scenarios:
+```typescript
+testProvider({
+ scenarios: [
+ {
+ id: 'custom-scenario',
+ name: 'Custom Scenario',
+ description: 'Your custom test scenario',
+ outcome: 'paid',
+ delay: 2000
+ }
+ ]
+})
+```
+
+### 3. Create Invoice Templates
+Add invoice generation endpoints that use specific templates
+
+### 4. Add Webhooks
+Create webhook handlers to process real payment events
+
+## 💡 Tips
+
+- **Reset Data**: Delete `dev/payload.sqlite` and restart to re-seed
+- **Check Console**: Test provider logs all events to the console
+- **Test Mode Warnings**: Notice the warning banners and badges in test mode
+- **Auto-sync**: Edit a customer's info and see invoices update automatically
+
+## 🐛 Troubleshooting
+
+### Payment not processing?
+- Check browser console for errors
+- Check server console for logs
+- Verify the test provider is enabled in config
+
+### Custom UI not loading?
+- Check that `customUiRoute` matches your page route
+- Verify the payment ID is valid (starts with `test_pay_`)
+
+### Types not matching?
+Run `pnpm dev:generate-types` to regenerate Payload types
+
+## 📚 Next Steps
+
+1. **Explore the Admin** - Login and browse the collections
+2. **Create Custom Invoices** - Try creating invoices with line items
+3. **Process Refunds** - Create refunds for successful payments
+4. **Add Real Providers** - Configure Stripe or Mollie (see README.md)
+5. **Build Your Integration** - Use this as a template for your app
+
+## 🎓 Learning Resources
+
+- Review `/dev/seed.ts` for data structure examples
+- Check `/dev/payload.config.ts` for plugin configuration
+- See `/dev/app/test-payment/[id]/page.tsx` for UI integration
+- Read the main [README.md](../README.md) for API documentation
+
+Happy testing! 🚀
diff --git a/dev/README.md b/dev/README.md
new file mode 100644
index 0000000..4667eee
--- /dev/null
+++ b/dev/README.md
@@ -0,0 +1,350 @@
+# Billing Plugin Demo Application
+
+This is a demo application showcasing the `@xtr-dev/payload-billing` plugin for PayloadCMS 3.x.
+
+## Features
+
+- 🧪 **Test Payment Provider** with customizable scenarios
+- 💳 **Payment Management** with full CRUD operations
+- 🧾 **Invoice Generation** with line items and tax calculation
+- 👥 **Customer Management** with relationship support
+- 🔄 **Refund Processing** and tracking
+- 🎨 **Custom Payment UI** with modern design
+- 📊 **Sample Data** for quick testing
+
+## Getting Started
+
+### Installation
+
+```bash
+# Install dependencies
+pnpm install
+```
+
+### Running the Demo
+
+```bash
+# Start the development server
+pnpm dev
+
+# The application will be available at http://localhost:3000
+```
+
+### Default Credentials
+
+- **Email**: `dev@payloadcms.com`
+- **Password**: `test`
+
+## Demo Routes
+
+### Interactive Demo Page
+Visit [http://localhost:3000](http://localhost:3000) to access the interactive demo page where you can:
+- Create test payments
+- View the custom payment UI
+- Test different payment scenarios
+- Navigate to admin collections
+
+### Custom Payment UI
+The custom test payment UI is available at:
+```
+http://localhost:3000/test-payment/{payment-id}
+```
+
+This page demonstrates:
+- Modern, responsive payment interface
+- Payment method selection
+- Test scenario selection (success, failure, cancellation, etc.)
+- Real-time payment status updates
+- Test mode indicators and warnings
+
+### Admin Routes
+
+- **Payments**: [http://localhost:3000/admin/collections/payments](http://localhost:3000/admin/collections/payments)
+- **Invoices**: [http://localhost:3000/admin/collections/invoices](http://localhost:3000/admin/collections/invoices)
+- **Refunds**: [http://localhost:3000/admin/collections/refunds](http://localhost:3000/admin/collections/refunds)
+- **Customers**: [http://localhost:3000/admin/collections/customers](http://localhost:3000/admin/collections/customers)
+
+## Sample Data
+
+The application includes seed data with:
+
+- **2 Customers**
+ - John Doe (Acme Corporation)
+ - Jane Smith (Tech Innovations Inc.)
+
+- **2 Invoices**
+ - Paid invoice with web development services
+ - Open invoice with subscription and additional users
+
+- **4 Payments**
+ - Successful payment linked to invoice
+ - Pending payment linked to invoice
+ - Standalone successful payment
+ - Failed payment example
+
+- **1 Refund**
+ - Partial refund on a successful payment
+
+To reset the sample data:
+```bash
+# Delete the database file
+rm dev/payload.sqlite
+
+# Restart the server (will re-seed automatically)
+pnpm dev
+```
+
+## Configuration
+
+The plugin is configured in `dev/payload.config.ts` with:
+
+### Test Provider Setup
+```typescript
+testProvider({
+ enabled: true,
+ testModeIndicators: {
+ showWarningBanners: true,
+ showTestBadges: true,
+ consoleWarnings: true
+ },
+ customUiRoute: '/test-payment',
+})
+```
+
+### Customer Relationship
+```typescript
+customerRelationSlug: 'customers',
+customerInfoExtractor: (customer) => ({
+ name: customer.name,
+ email: customer.email,
+ phone: customer.phone,
+ company: customer.company,
+ taxId: customer.taxId,
+ billingAddress: customer.address ? {
+ line1: customer.address.line1,
+ line2: customer.address.line2,
+ city: customer.address.city,
+ state: customer.address.state,
+ postalCode: customer.address.postalCode,
+ country: customer.address.country,
+ } : undefined,
+})
+```
+
+## Test Payment Scenarios
+
+The test provider includes the following scenarios:
+
+1. **Instant Success** - Payment succeeds immediately
+2. **Delayed Success** - Payment succeeds after a delay (3s)
+3. **Cancelled Payment** - User cancels the payment (1s)
+4. **Declined Payment** - Payment is declined by the provider (2s)
+5. **Expired Payment** - Payment expires before completion (5s)
+6. **Pending Payment** - Payment remains in pending state (1.5s)
+
+## Payment Methods
+
+The test provider supports these payment methods:
+
+- 🏦 iDEAL
+- 💳 Credit Card
+- 🅿️ PayPal
+- 🍎 Apple Pay
+- 🏛️ Bank Transfer
+
+## API Examples
+
+### Creating a Payment (Local API)
+
+```typescript
+import { getPayload } from 'payload'
+import configPromise from '@payload-config'
+
+const payload = await getPayload({ config: configPromise })
+
+const payment = await payload.create({
+ collection: 'payments',
+ data: {
+ provider: 'test',
+ amount: 2500, // $25.00 in cents
+ currency: 'USD',
+ description: 'Demo payment',
+ status: 'pending',
+ }
+})
+
+// The payment will have a providerId that can be used in the custom UI
+console.log(`Payment URL: /test-payment/${payment.providerId}`)
+```
+
+### Creating an Invoice with Customer
+
+```typescript
+const invoice = await payload.create({
+ collection: 'invoices',
+ data: {
+ customer: 'customer-id-here',
+ currency: 'USD',
+ items: [
+ {
+ description: 'Service',
+ quantity: 1,
+ unitAmount: 5000 // $50.00
+ }
+ ],
+ taxAmount: 500, // $5.00
+ status: 'open'
+ }
+})
+```
+
+### REST API Example
+
+```bash
+# Create a payment
+curl -X POST http://localhost:3000/api/payments \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -d '{
+ "provider": "test",
+ "amount": 2500,
+ "currency": "USD",
+ "description": "Demo payment",
+ "status": "pending"
+ }'
+```
+
+## Custom Routes
+
+The demo includes custom API routes:
+
+### Create Payment
+```
+POST /api/demo/create-payment
+```
+
+Request body:
+```json
+{
+ "amount": 2500,
+ "currency": "USD",
+ "description": "Demo payment"
+}
+```
+
+Response:
+```json
+{
+ "success": true,
+ "payment": {
+ "id": "test_pay_1234567890_abc123",
+ "paymentId": "67890",
+ "amount": 2500,
+ "currency": "USD",
+ "description": "Demo payment"
+ }
+}
+```
+
+## Development
+
+### File Structure
+
+```
+dev/
+├── app/
+│ ├── page.tsx # Interactive demo page (root)
+│ ├── test-payment/
+│ │ └── [id]/
+│ │ └── page.tsx # Custom payment UI
+│ ├── api/
+│ │ └── demo/
+│ │ └── create-payment/
+│ │ └── route.ts # Payment creation endpoint
+│ └── (payload)/ # PayloadCMS admin routes
+├── helpers/
+│ └── credentials.ts # Default user credentials
+├── payload.config.ts # PayloadCMS configuration
+├── seed.ts # Sample data seeding
+└── README.md # This file
+```
+
+### Modifying the Demo
+
+To customize the demo:
+
+1. **Add more test scenarios**: Edit the `testProvider` config in `payload.config.ts`
+2. **Customize the payment UI**: Edit `app/test-payment/[id]/page.tsx`
+3. **Add more sample data**: Edit `seed.ts`
+4. **Add custom collections**: Add to `collections` array in `payload.config.ts`
+
+### Testing Different Providers
+
+To test with real payment providers:
+
+```typescript
+// Install the provider
+pnpm add stripe
+// or
+pnpm add @mollie/api-client
+
+// Update payload.config.ts
+import { stripeProvider, mollieProvider } from '../src/providers'
+
+billingPlugin({
+ providers: [
+ stripeProvider({
+ secretKey: process.env.STRIPE_SECRET_KEY!,
+ webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
+ }),
+ mollieProvider({
+ apiKey: process.env.MOLLIE_API_KEY!,
+ webhookUrl: process.env.MOLLIE_WEBHOOK_URL,
+ }),
+ // Keep test provider for development
+ testProvider({ enabled: true }),
+ ],
+ // ... rest of config
+})
+```
+
+## Troubleshooting
+
+### Database Issues
+
+If you encounter database errors:
+```bash
+# Delete the database
+rm dev/payload.sqlite
+
+# Regenerate types
+pnpm dev:generate-types
+
+# Restart the server
+pnpm dev
+```
+
+### Port Already in Use
+
+If port 3000 is already in use:
+```bash
+# Use a different port
+PORT=3001 pnpm dev
+```
+
+### TypeScript Errors
+
+Regenerate Payload types:
+```bash
+pnpm dev:generate-types
+```
+
+## Resources
+
+- [Plugin Documentation](../README.md)
+- [PayloadCMS Documentation](https://payloadcms.com/docs)
+- [GitHub Repository](https://github.com/xtr-dev/payload-billing)
+
+## License
+
+MIT
diff --git a/dev/app/api/demo/create-payment/route.ts b/dev/app/api/demo/create-payment/route.ts
new file mode 100644
index 0000000..89832fb
--- /dev/null
+++ b/dev/app/api/demo/create-payment/route.ts
@@ -0,0 +1,56 @@
+import configPromise from '@payload-config'
+import { getPayload } from 'payload'
+
+export async function POST(request: Request) {
+ try {
+ const payload = await getPayload({
+ config: configPromise,
+ })
+
+ const body = await request.json()
+ const { amount, currency, description } = body
+
+ if (!amount || !currency) {
+ return Response.json(
+ { success: false, error: 'Amount and currency are required' },
+ { status: 400 }
+ )
+ }
+
+ // Create a payment using the test provider
+ const payment = await payload.create({
+ collection: 'payments',
+ data: {
+ provider: 'test',
+ amount,
+ currency,
+ description: description || 'Demo payment',
+ status: 'pending',
+ metadata: {
+ source: 'demo-ui',
+ createdAt: new Date().toISOString(),
+ },
+ },
+ })
+
+ return Response.json({
+ success: true,
+ payment: {
+ id: payment.providerId, // Use the test provider ID for the UI
+ paymentId: payment.id,
+ amount: payment.amount,
+ currency: payment.currency,
+ description: payment.description,
+ },
+ })
+ } catch (error) {
+ console.error('Failed to create payment:', error)
+ return Response.json(
+ {
+ success: false,
+ error: error instanceof Error ? error.message : 'Failed to create payment',
+ },
+ { status: 500 }
+ )
+ }
+}
diff --git a/dev/app/globals.css b/dev/app/globals.css
new file mode 100644
index 0000000..f1d8c73
--- /dev/null
+++ b/dev/app/globals.css
@@ -0,0 +1 @@
+@import "tailwindcss";
diff --git a/dev/app/layout.tsx b/dev/app/layout.tsx
new file mode 100644
index 0000000..ca2516a
--- /dev/null
+++ b/dev/app/layout.tsx
@@ -0,0 +1,19 @@
+import type { Metadata } from 'next'
+import './globals.css'
+
+export const metadata: Metadata = {
+ title: 'Billing Plugin Demo - PayloadCMS',
+ description: 'Demo application for @xtr-dev/payload-billing plugin',
+}
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode
+}) {
+ return (
+
+
{children}
+
+ )
+}
diff --git a/dev/app/page.tsx b/dev/app/page.tsx
new file mode 100644
index 0000000..1d208ff
--- /dev/null
+++ b/dev/app/page.tsx
@@ -0,0 +1,183 @@
+'use client'
+
+import Link from 'next/link'
+import { useState } from 'react'
+
+export default function HomePage() {
+ const [paymentId, setPaymentId] = useState('')
+ const [loading, setLoading] = useState(false)
+ const [error, setError] = useState('')
+
+ const createDemoPayment = async () => {
+ setLoading(true)
+ setError('')
+
+ try {
+ const response = await fetch('/api/demo/create-payment', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ amount: 2500,
+ currency: 'USD',
+ description: 'Demo payment from custom UI',
+ }),
+ })
+
+ const data = await response.json()
+
+ if (data.success) {
+ setPaymentId(data.payment.id)
+ } else {
+ setError(data.error || 'Failed to create payment')
+ }
+ } catch (err) {
+ setError(err instanceof Error ? err.message : 'An error occurred')
+ } finally {
+ setLoading(false)
+ }
+ }
+
+ return (
+
+
+
+
+
Billing Plugin Demo
+
+ Test the @xtr-dev/payload-billing plugin with the test provider
+
+
+
+
+
+
+ 🎮 Interactive Demo
+
+
+ This demo shows how to integrate the billing plugin into your application. Click
+ the button below to create a test payment and see the custom payment UI in action.
+
+
+
+
+ Create Test Payment
+
+
+ {!paymentId ? (
+
+
+ {loading ? 'Creating Payment...' : 'Create Demo Payment'}
+
+
+ {error && (
+
+ {error}
+
+ )}
+
+ ) : (
+
+
+
+ ✓
+ Payment Created Successfully!
+
+
+ Payment ID: {paymentId}
+
+
+
+
+
+ Go to Payment Page →
+
+ {
+ setPaymentId('')
+ setError('')
+ }}
+ className="bg-slate-200 text-slate-700 px-6 py-3 rounded-lg font-semibold hover:bg-slate-300 transition-all cursor-pointer"
+ >
+ Create Another
+
+
+
+ )}
+
+
+
+
+
+ 📚 Quick Links
+
+
+
+
💳 Payments
+
View all payment transactions
+
+
+
+
🧾 Invoices
+
Manage invoices and billing
+
+
+
+
🔄 Refunds
+
Process and track refunds
+
+
+
+
👥 Customers
+
Manage customer information
+
+
+
+
+
+
+ 💡 About This Demo
+
+
+
+ This demo application showcases the @xtr-dev/payload-billing plugin
+ for PayloadCMS 3.x with the following features:
+
+
+ Test payment provider with customizable scenarios
+ Custom payment UI page with modern design
+ Customer relationship management with auto-sync
+ Invoice generation with line items and tax calculation
+ Refund processing and tracking
+ Sample data seeding for quick testing
+
+
+ The test provider allows you to simulate different payment outcomes including
+ success, failure, cancellation, and more - perfect for development and testing!
+
+
+
+
+
+
+
+ )
+}
diff --git a/dev/app/payment-failed/page.tsx b/dev/app/payment-failed/page.tsx
new file mode 100644
index 0000000..8c2130e
--- /dev/null
+++ b/dev/app/payment-failed/page.tsx
@@ -0,0 +1,185 @@
+'use client'
+
+import Link from 'next/link'
+import { useSearchParams } from 'next/navigation'
+import { Suspense } from 'react'
+
+function PaymentFailedContent() {
+ const searchParams = useSearchParams()
+ const paymentId = searchParams.get('paymentId')
+ const reason = searchParams.get('reason') || 'unknown'
+ const amount = searchParams.get('amount')
+ const currency = searchParams.get('currency')
+
+ const getReasonText = (reason: string) => {
+ switch (reason) {
+ case 'failed':
+ return 'Payment was declined'
+ case 'cancelled':
+ return 'Payment was cancelled'
+ case 'expired':
+ return 'Payment session expired'
+ default:
+ return 'Payment could not be completed'
+ }
+ }
+
+ const getReasonDescription = (reason: string) => {
+ switch (reason) {
+ case 'failed':
+ return 'The payment provider declined the transaction. This is a simulated failure for testing purposes.'
+ case 'cancelled':
+ return 'The payment was cancelled before completion. You can try again with a different test scenario.'
+ case 'expired':
+ return 'The payment session timed out. Please create a new payment to try again.'
+ default:
+ return 'An unexpected error occurred during payment processing.'
+ }
+ }
+
+ return (
+
+
+
+
+
Payment {reason.charAt(0).toUpperCase() + reason.slice(1)}
+
+ {getReasonText(reason)}
+
+
+
+
+
+
+ What Happened?
+
+
+ {getReasonDescription(reason)}
+
+
+
+ {paymentId && (
+
+ Payment ID:
+
+ {paymentId}
+
+
+ )}
+ {amount && currency && (
+
+ Amount:
+
+ {currency.toUpperCase()} {(parseInt(amount) / 100).toFixed(2)}
+
+
+ )}
+
+ Status:
+
+ {reason}
+
+
+
+
+
+
+
Try Again
+
+
+
+
+
+ 🔄 Try Another Payment
+
+
+ Create a new test payment with different scenario
+
+
+
+
+
+
+
+
+
+
+ 💳 View Payment History
+
+
+ Check all payments in admin
+
+
+
+
+
+
+
+
+
+
+
+ 💡 Testing Tip: This failure was simulated using the test provider.
+ Try selecting a different test scenario like "Instant Success" or "Delayed Success"
+ to see a successful payment flow.
+
+
+
+
+
+ )
+}
+
+export default function PaymentFailedPage() {
+ return (
+
+ Loading...
+
+ }>
+
+
+ )
+}
diff --git a/dev/app/payment-success/page.tsx b/dev/app/payment-success/page.tsx
new file mode 100644
index 0000000..6d3da75
--- /dev/null
+++ b/dev/app/payment-success/page.tsx
@@ -0,0 +1,184 @@
+'use client'
+
+import Link from 'next/link'
+import { useSearchParams } from 'next/navigation'
+import { Suspense } from 'react'
+
+function PaymentSuccessContent() {
+ const searchParams = useSearchParams()
+ const paymentId = searchParams.get('paymentId')
+ const amount = searchParams.get('amount')
+ const currency = searchParams.get('currency')
+
+ return (
+
+
+
+
+
Payment Successful!
+
+ Your test payment has been processed successfully
+
+
+
+
+
+
+ Payment Details
+
+
+ {paymentId && (
+
+ Payment ID:
+
+ {paymentId}
+
+
+ )}
+ {amount && currency && (
+
+ Amount:
+
+ {currency.toUpperCase()} {(parseInt(amount) / 100).toFixed(2)}
+
+
+ )}
+
+ Status:
+
+ Succeeded
+
+
+
+ Provider:
+ Test Provider
+
+
+
+
+
+
What's Next?
+
+
+
+
+
+ 🏠 Back to Demo
+
+
+ Try another test payment
+
+
+
+
+
+
+
+
+
+
+ 💳 View All Payments
+
+
+ Check payment history in admin
+
+
+
+
+
+
+
+
+
+
+ 🧾 View Invoices
+
+
+ Check invoices in admin
+
+
+
+
+
+
+
+
+
+
+
+ 💡 Demo Tip: This was a simulated payment using the test provider.
+ In production, you would integrate with real providers like Stripe or Mollie.
+
+
+
+
+
+ )
+}
+
+export default function PaymentSuccessPage() {
+ return (
+
+ Loading...
+
+ }>
+
+
+ )
+}
diff --git a/dev/app/test-payment/[id]/page.tsx b/dev/app/test-payment/[id]/page.tsx
new file mode 100644
index 0000000..e3ebf4f
--- /dev/null
+++ b/dev/app/test-payment/[id]/page.tsx
@@ -0,0 +1,291 @@
+'use client'
+
+import { useParams, useRouter } from 'next/navigation'
+import { useEffect, useState } from 'react'
+
+interface PaymentMethod {
+ id: string
+ name: string
+ icon: string
+}
+
+interface Scenario {
+ id: string
+ name: string
+ description: string
+ outcome: string
+ delay?: number
+}
+
+interface TestProviderConfig {
+ enabled: boolean
+ scenarios: Scenario[]
+ methods: PaymentMethod[]
+ testModeIndicators: {
+ showWarningBanners: boolean
+ showTestBadges: boolean
+ consoleWarnings: boolean
+ }
+ defaultDelay: number
+ customUiRoute: string
+}
+
+interface PaymentSession {
+ id: string
+ amount: number
+ currency: string
+ description?: string
+}
+
+export default function TestPaymentPage() {
+ const params = useParams()
+ const router = useRouter()
+ const paymentId = params.id as string
+
+ const [config, setConfig] = useState(null)
+ const [session, setSession] = useState(null)
+ const [selectedMethod, setSelectedMethod] = useState(null)
+ const [selectedScenario, setSelectedScenario] = useState(null)
+ const [processing, setProcessing] = useState(false)
+ const [status, setStatus] = useState<{
+ type: 'idle' | 'processing' | 'success' | 'error'
+ message: string
+ }>({ type: 'idle', message: '' })
+
+ useEffect(() => {
+ // Load test provider config
+ fetch('/api/payload-billing/test/config')
+ .then((res) => res.json())
+ .then((data) => {
+ setConfig(data)
+ if (data.testModeIndicators?.consoleWarnings) {
+ console.warn('[Test Provider] 🧪 TEST MODE: This is a simulated payment interface')
+ }
+ })
+ .catch((err) => {
+ console.error('Failed to load test provider config:', err)
+ })
+
+ // Load payment session (mock data for demo)
+ setSession({
+ id: paymentId,
+ amount: 2500,
+ currency: 'USD',
+ description: 'Demo payment for testing the billing plugin',
+ })
+ }, [paymentId])
+
+ const handleProcessPayment = async () => {
+ if (!selectedMethod || !selectedScenario) return
+
+ setProcessing(true)
+ setStatus({ type: 'processing', message: 'Initiating payment...' })
+
+ try {
+ const response = await fetch('/api/payload-billing/test/process', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ paymentId,
+ scenarioId: selectedScenario,
+ method: selectedMethod,
+ }),
+ })
+
+ const result = await response.json()
+
+ if (result.success) {
+ const scenario = config?.scenarios.find((s) => s.id === selectedScenario)
+ setStatus({
+ type: 'processing',
+ message: `Processing payment with ${scenario?.name}...`,
+ })
+
+ // Poll for status updates
+ setTimeout(() => pollStatus(), result.delay || 1000)
+ } else {
+ throw new Error(result.error || 'Failed to process payment')
+ }
+ } catch (error) {
+ setStatus({
+ type: 'error',
+ message: error instanceof Error ? error.message : 'An error occurred',
+ })
+ setProcessing(false)
+ }
+ }
+
+ const pollStatus = async () => {
+ try {
+ const response = await fetch(`/api/payload-billing/test/status/${paymentId}`)
+ const result = await response.json()
+
+ if (result.status === 'paid') {
+ setStatus({ type: 'success', message: '✅ Payment successful!' })
+ setTimeout(() => {
+ const params = new URLSearchParams({
+ paymentId: paymentId,
+ amount: session.amount.toString(),
+ currency: session.currency,
+ })
+ router.push(`/payment-success?${params.toString()}`)
+ }, 2000)
+ } else if (['failed', 'cancelled', 'expired'].includes(result.status)) {
+ setStatus({ type: 'error', message: `❌ Payment ${result.status}` })
+ setTimeout(() => {
+ const params = new URLSearchParams({
+ paymentId: paymentId,
+ amount: session.amount.toString(),
+ currency: session.currency,
+ reason: result.status,
+ })
+ router.push(`/payment-failed?${params.toString()}`)
+ }, 2000)
+ } else if (result.status === 'pending') {
+ setStatus({ type: 'processing', message: 'Payment is still pending...' })
+ setTimeout(() => pollStatus(), 2000)
+ }
+ } catch (error) {
+ console.error('[Test Provider] Failed to poll status:', error)
+ setStatus({ type: 'error', message: 'Failed to check payment status' })
+ setProcessing(false)
+ }
+ }
+
+ if (!config || !session) {
+ return (
+
+ )
+ }
+
+ return (
+
+
+
+ {config.testModeIndicators.showWarningBanners && (
+
+ 🧪 TEST MODE - This is a simulated payment for development purposes
+
+ )}
+
+
+
+
Test Payment Checkout
+ {config.testModeIndicators.showTestBadges && (
+
+ Test
+
+ )}
+
+
+ {session.currency.toUpperCase()} {(session.amount / 100).toFixed(2)}
+
+ {session.description && (
+
{session.description}
+ )}
+
+
+
+ {/* Payment Methods */}
+
+
+ 💳 Select Payment Method
+
+
+ {config.methods.map((method) => (
+
setSelectedMethod(method.id)}
+ disabled={processing}
+ className={`p-4 rounded-lg border-2 transition-all cursor-pointer ${
+ selectedMethod === method.id
+ ? 'border-blue-500 bg-blue-500 text-white shadow-lg'
+ : 'border-slate-200 bg-white text-slate-700 hover:border-blue-300 hover:bg-blue-50'
+ } disabled:opacity-50 disabled:cursor-not-allowed`}
+ >
+ {method.icon}
+ {method.name}
+
+ ))}
+
+
+
+ {/* Test Scenarios */}
+
+
+ 🎭 Select Test Scenario
+
+
+ {config.scenarios.map((scenario) => (
+
setSelectedScenario(scenario.id)}
+ disabled={processing}
+ className={`w-full p-4 rounded-lg border-2 text-left transition-all cursor-pointer ${
+ selectedScenario === scenario.id
+ ? 'border-green-500 bg-green-500 text-white shadow-lg'
+ : 'border-slate-200 bg-white text-slate-700 hover:border-green-300 hover:bg-green-50'
+ } disabled:opacity-50 disabled:cursor-not-allowed`}
+ >
+ {scenario.name}
+
+ {scenario.description}
+
+
+ ))}
+
+
+
+ {/* Process Button */}
+
+ {processing ? (
+
+
+ Processing...
+
+ ) : (
+ 'Process Test Payment'
+ )}
+
+
+ {/* Status Message */}
+ {status.type !== 'idle' && (
+
+ {status.type === 'processing' && (
+
+ )}
+ {status.message}
+
+ )}
+
+
+
+ {/* Info Card */}
+
+
💡 Demo Information
+
+ This is a custom test payment UI for the @xtr-dev/payload-billing plugin. Select a
+ payment method and scenario to simulate different payment outcomes. The payment will be
+ processed according to the selected scenario.
+
+
+
+
+ )
+}
diff --git a/dev/payload-types.ts b/dev/payload-types.ts
index 4fb47ca..c791428 100644
--- a/dev/payload-types.ts
+++ b/dev/payload-types.ts
@@ -69,6 +69,7 @@ export interface Config {
collections: {
posts: Post;
media: Media;
+ customers: Customer;
payments: Payment;
invoices: Invoice;
refunds: Refund;
@@ -81,6 +82,7 @@ export interface Config {
collectionsSelect: {
posts: PostsSelect | PostsSelect;
media: MediaSelect | MediaSelect;
+ customers: CustomersSelect | CustomersSelect;
payments: PaymentsSelect | PaymentsSelect;
invoices: InvoicesSelect | InvoicesSelect;
refunds: RefundsSelect | RefundsSelect;
@@ -148,6 +150,28 @@ export interface Media {
focalX?: number | null;
focalY?: number | null;
}
+/**
+ * This interface was referenced by `Config`'s JSON-Schema
+ * via the `definition` "customers".
+ */
+export interface Customer {
+ id: number;
+ name: string;
+ email: string;
+ phone?: string | null;
+ company?: string | null;
+ taxId?: string | null;
+ address?: {
+ line1?: string | null;
+ line2?: string | null;
+ city?: string | null;
+ state?: string | null;
+ postalCode?: string | null;
+ country?: string | null;
+ };
+ updatedAt: string;
+ createdAt: string;
+}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payments".
@@ -213,17 +237,21 @@ export interface Invoice {
*/
number: string;
/**
- * Customer billing information
+ * Link to customer record (optional)
*/
- customerInfo: {
+ customer?: (number | null) | Customer;
+ /**
+ * Customer billing information (auto-populated from customer relationship)
+ */
+ customerInfo?: {
/**
* Customer name
*/
- name: string;
+ name?: string | null;
/**
* Customer email address
*/
- email: string;
+ email?: string | null;
/**
* Customer phone number
*/
@@ -238,18 +266,18 @@ export interface Invoice {
taxId?: string | null;
};
/**
- * Billing address
+ * Billing address (auto-populated from customer relationship)
*/
- billingAddress: {
+ billingAddress?: {
/**
* Address line 1
*/
- line1: string;
+ line1?: string | null;
/**
* Address line 2
*/
line2?: string | null;
- city: string;
+ city?: string | null;
/**
* State or province
*/
@@ -257,11 +285,11 @@ export interface Invoice {
/**
* Postal or ZIP code
*/
- postalCode: string;
+ postalCode?: string | null;
/**
* Country code (e.g., US, GB)
*/
- country: string;
+ country?: string | null;
};
status: 'draft' | 'open' | 'paid' | 'void' | 'uncollectible';
/**
@@ -402,6 +430,10 @@ export interface PayloadLockedDocument {
relationTo: 'media';
value: number | Media;
} | null)
+ | ({
+ relationTo: 'customers';
+ value: number | Customer;
+ } | null)
| ({
relationTo: 'payments';
value: number | Payment;
@@ -485,6 +517,29 @@ export interface MediaSelect {
focalX?: T;
focalY?: T;
}
+/**
+ * This interface was referenced by `Config`'s JSON-Schema
+ * via the `definition` "customers_select".
+ */
+export interface CustomersSelect {
+ name?: T;
+ email?: T;
+ phone?: T;
+ company?: T;
+ taxId?: T;
+ address?:
+ | T
+ | {
+ line1?: T;
+ line2?: T;
+ city?: T;
+ state?: T;
+ postalCode?: T;
+ country?: T;
+ };
+ updatedAt?: T;
+ createdAt?: T;
+}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payments_select".
@@ -510,6 +565,7 @@ export interface PaymentsSelect {
*/
export interface InvoicesSelect {
number?: T;
+ customer?: T;
customerInfo?:
| T
| {
diff --git a/dev/payload.config.ts b/dev/payload.config.ts
index e746f8a..54d60d1 100644
--- a/dev/payload.config.ts
+++ b/dev/payload.config.ts
@@ -36,6 +36,71 @@ const buildConfigWithSQLite = () => {
staticDir: path.resolve(dirname, 'media'),
},
},
+ {
+ slug: 'customers',
+ admin: {
+ useAsTitle: 'name',
+ },
+ fields: [
+ {
+ name: 'name',
+ type: 'text',
+ required: true,
+ },
+ {
+ name: 'email',
+ type: 'email',
+ required: true,
+ },
+ {
+ name: 'phone',
+ type: 'text',
+ },
+ {
+ name: 'company',
+ type: 'text',
+ },
+ {
+ name: 'taxId',
+ type: 'text',
+ label: 'Tax ID',
+ },
+ {
+ name: 'address',
+ type: 'group',
+ fields: [
+ {
+ name: 'line1',
+ type: 'text',
+ label: 'Address Line 1',
+ },
+ {
+ name: 'line2',
+ type: 'text',
+ label: 'Address Line 2',
+ },
+ {
+ name: 'city',
+ type: 'text',
+ },
+ {
+ name: 'state',
+ type: 'text',
+ label: 'State/Province',
+ },
+ {
+ name: 'postalCode',
+ type: 'text',
+ label: 'Postal Code',
+ },
+ {
+ name: 'country',
+ type: 'text',
+ },
+ ],
+ },
+ ],
+ },
],
db: sqliteAdapter({
client: {
@@ -56,7 +121,8 @@ const buildConfigWithSQLite = () => {
showWarningBanners: true,
showTestBadges: true,
consoleWarnings: true
- }
+ },
+ customUiRoute: '/test-payment',
})
],
collections: {
@@ -64,6 +130,22 @@ const buildConfigWithSQLite = () => {
invoices: 'invoices',
refunds: 'refunds',
},
+ customerRelationSlug: 'customers',
+ customerInfoExtractor: (customer) => ({
+ name: customer.name,
+ email: customer.email,
+ phone: customer.phone,
+ company: customer.company,
+ taxId: customer.taxId,
+ billingAddress: customer.address ? {
+ line1: customer.address.line1,
+ line2: customer.address.line2,
+ city: customer.address.city,
+ state: customer.address.state,
+ postalCode: customer.address.postalCode,
+ country: customer.address.country,
+ } : undefined,
+ }),
}),
],
secret: process.env.PAYLOAD_SECRET || 'test-secret_key',
diff --git a/dev/postcss.config.mjs b/dev/postcss.config.mjs
new file mode 100644
index 0000000..a869506
--- /dev/null
+++ b/dev/postcss.config.mjs
@@ -0,0 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
+}
+
+export default config
diff --git a/dev/seed.ts b/dev/seed.ts
index 935948a..7c39db6 100644
--- a/dev/seed.ts
+++ b/dev/seed.ts
@@ -21,9 +21,189 @@ export const seed = async (payload: Payload) => {
}
// Seed billing sample data
- // await seedBillingData(payload)
+ await seedBillingData(payload)
}
-// async function seedBillingData(payload: Payload): Promise {
-// payload.logger.info('Seeding billing sample data...')
-// }
+async function seedBillingData(payload: Payload): Promise {
+ payload.logger.info('Seeding billing sample data...')
+
+ // Check if we already have data
+ const existingPayments = await payload.count({
+ collection: 'payments',
+ })
+
+ if (existingPayments.totalDocs > 0) {
+ payload.logger.info('Billing data already exists, skipping seed...')
+ return
+ }
+
+ // Check if customers collection exists
+ const hasCustomers = payload.collections['customers'] !== undefined
+
+ let customer1Id: string | number | undefined
+ let customer2Id: string | number | undefined
+
+ if (hasCustomers) {
+ // Seed customers
+ payload.logger.info('Seeding customers...')
+ const customer1 = await payload.create({
+ collection: 'customers',
+ data: {
+ name: 'John Doe',
+ email: 'john.doe@example.com',
+ phone: '+1 (555) 123-4567',
+ company: 'Acme Corporation',
+ taxId: 'US-123456789',
+ address: {
+ line1: '123 Main Street',
+ line2: 'Suite 100',
+ city: 'New York',
+ state: 'NY',
+ postalCode: '10001',
+ country: 'US',
+ },
+ },
+ })
+ customer1Id = customer1.id
+
+ const customer2 = await payload.create({
+ collection: 'customers',
+ data: {
+ name: 'Jane Smith',
+ email: 'jane.smith@example.com',
+ phone: '+1 (555) 987-6543',
+ company: 'Tech Innovations Inc.',
+ address: {
+ line1: '456 Tech Avenue',
+ city: 'San Francisco',
+ state: 'CA',
+ postalCode: '94102',
+ country: 'US',
+ },
+ },
+ })
+ customer2Id = customer2.id
+ }
+
+ // Seed invoices
+ payload.logger.info('Seeding invoices...')
+
+ const invoiceData1 = hasCustomers
+ ? {
+ customer: customer1Id,
+ currency: 'USD',
+ items: [
+ {
+ description: 'Web Development Services',
+ quantity: 40,
+ unitAmount: 12500, // $125/hour
+ },
+ {
+ description: 'Hosting & Deployment',
+ quantity: 1,
+ unitAmount: 5000, // $50
+ },
+ ],
+ taxAmount: 52500, // $525 tax (10%)
+ status: 'paid',
+ notes: 'Thank you for your business!',
+ }
+ : {
+ customerInfo: {
+ name: 'John Doe',
+ email: 'john.doe@example.com',
+ phone: '+1 (555) 123-4567',
+ company: 'Acme Corporation',
+ taxId: 'US-123456789',
+ },
+ billingAddress: {
+ line1: '123 Main Street',
+ line2: 'Suite 100',
+ city: 'New York',
+ state: 'NY',
+ postalCode: '10001',
+ country: 'US',
+ },
+ currency: 'USD',
+ items: [
+ {
+ description: 'Web Development Services',
+ quantity: 40,
+ unitAmount: 12500,
+ },
+ {
+ description: 'Hosting & Deployment',
+ quantity: 1,
+ unitAmount: 5000,
+ },
+ ],
+ taxAmount: 52500,
+ status: 'paid',
+ notes: 'Thank you for your business!',
+ }
+
+ const invoice1 = await payload.create({
+ collection: 'invoices',
+ data: invoiceData1 as any,
+ })
+
+ const invoiceData2 = hasCustomers
+ ? {
+ customer: customer2Id,
+ currency: 'USD',
+ items: [
+ {
+ description: 'Monthly Subscription - Pro Plan',
+ quantity: 1,
+ unitAmount: 9900, // $99
+ },
+ {
+ description: 'Additional Users (x5)',
+ quantity: 5,
+ unitAmount: 2000, // $20 each
+ },
+ ],
+ taxAmount: 1990,
+ status: 'open',
+ }
+ : {
+ customerInfo: {
+ name: 'Jane Smith',
+ email: 'jane.smith@example.com',
+ phone: '+1 (555) 987-6543',
+ company: 'Tech Innovations Inc.',
+ },
+ billingAddress: {
+ line1: '456 Tech Avenue',
+ city: 'San Francisco',
+ state: 'CA',
+ postalCode: '94102',
+ country: 'US',
+ },
+ currency: 'USD',
+ items: [
+ {
+ description: 'Monthly Subscription - Pro Plan',
+ quantity: 1,
+ unitAmount: 9900,
+ },
+ {
+ description: 'Additional Users (x5)',
+ quantity: 5,
+ unitAmount: 2000,
+ },
+ ],
+ taxAmount: 1990,
+ status: 'open',
+ }
+
+ const invoice2 = await payload.create({
+ collection: 'invoices',
+ data: invoiceData2 as any,
+ })
+
+ // Note: Skip payment seeding during initialization because the billing plugin
+ // providers aren't fully initialized yet. Payments can be created via the demo UI.
+
+ payload.logger.info('✅ Billing sample data seeded successfully!')
+}
diff --git a/dev/tailwind.config.ts b/dev/tailwind.config.ts
new file mode 100644
index 0000000..e581d09
--- /dev/null
+++ b/dev/tailwind.config.ts
@@ -0,0 +1,14 @@
+import type { Config } from 'tailwindcss'
+
+const config: Config = {
+ content: [
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
+
+export default config
diff --git a/package.json b/package.json
index ad9879c..554ba7c 100644
--- a/package.json
+++ b/package.json
@@ -81,9 +81,11 @@
"@playwright/test": "^1.52.0",
"@swc-node/register": "1.10.9",
"@swc/cli": "0.6.0",
+ "@tailwindcss/postcss": "^4.1.17",
"@types/node": "^22.5.4",
"@types/react": "19.1.8",
"@types/react-dom": "19.1.6",
+ "autoprefixer": "^10.4.21",
"copyfiles": "2.4.1",
"cross-env": "^7.0.3",
"eslint": "^9.23.0",
@@ -93,6 +95,7 @@
"next": "15.4.4",
"open": "^10.1.0",
"payload": "3.37.0",
+ "postcss": "^8.5.6",
"prettier": "^3.4.2",
"qs-esm": "7.0.2",
"react": "19.1.0",
@@ -101,6 +104,7 @@
"sharp": "0.34.2",
"sort-package-json": "^2.10.0",
"stripe": "^18.5.0",
+ "tailwindcss": "^4.1.17",
"typescript": "5.7.3",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.1.2"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 971afd0..adafb53 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -32,7 +32,7 @@ importers:
version: 3.37.0(@types/pg@8.10.2)(@types/react@19.1.8)(payload@3.37.0(graphql@16.11.0)(typescript@5.7.3))(pg@8.11.3)(react@19.1.0)
'@payloadcms/eslint-config':
specifier: 3.9.0
- version: 3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))
+ version: 3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)
'@payloadcms/next':
specifier: 3.37.0
version: 3.37.0(@types/react@19.1.8)(graphql@16.11.0)(monaco-editor@0.53.0)(next@15.4.4(@playwright/test@1.55.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.37.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
@@ -51,6 +51,9 @@ importers:
'@swc/cli':
specifier: 0.6.0
version: 0.6.0(@swc/core@1.13.5)
+ '@tailwindcss/postcss':
+ specifier: ^4.1.17
+ version: 4.1.17
'@types/node':
specifier: ^22.5.4
version: 22.18.1
@@ -60,6 +63,9 @@ importers:
'@types/react-dom':
specifier: 19.1.6
version: 19.1.6(@types/react@19.1.8)
+ autoprefixer:
+ specifier: ^10.4.21
+ version: 10.4.21(postcss@8.5.6)
copyfiles:
specifier: 2.4.1
version: 2.4.1
@@ -68,10 +74,10 @@ importers:
version: 7.0.3
eslint:
specifier: ^9.23.0
- version: 9.35.0
+ version: 9.35.0(jiti@2.6.1)
eslint-config-next:
specifier: 15.4.4
- version: 15.4.4(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3)
+ version: 15.4.4(eslint-plugin-import-x@4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
graphql:
specifier: ^16.8.1
version: 16.11.0
@@ -87,6 +93,9 @@ importers:
payload:
specifier: 3.37.0
version: 3.37.0(graphql@16.11.0)(typescript@5.7.3)
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
prettier:
specifier: ^3.4.2
version: 3.6.2
@@ -111,18 +120,25 @@ importers:
stripe:
specifier: ^18.5.0
version: 18.5.0(@types/node@22.18.1)
+ tailwindcss:
+ specifier: ^4.1.17
+ version: 4.1.17
typescript:
specifier: 5.7.3
version: 5.7.3
vite-tsconfig-paths:
specifier: ^5.1.4
- version: 5.1.4(typescript@5.7.3)(vite@7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2))
+ version: 5.1.4(typescript@5.7.3)(vite@7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2))
vitest:
specifier: ^3.1.2
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)
packages:
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
'@apidevtools/json-schema-ref-parser@11.9.3':
resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==}
engines: {node: '>= 16'}
@@ -1284,6 +1300,9 @@ packages:
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
@@ -1978,6 +1997,94 @@ packages:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'}
+ '@tailwindcss/node@4.1.17':
+ resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
+
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
+ resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.1.17':
+ resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
+ engines: {node: '>= 10'}
+
+ '@tailwindcss/postcss@4.1.17':
+ resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==}
+
'@tokenizer/inflate@0.2.7':
resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==}
engines: {node: '>=18'}
@@ -2473,6 +2580,13 @@ packages:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
+ autoprefixer@10.4.21:
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
@@ -2509,6 +2623,10 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ baseline-browser-mapping@2.8.25:
+ resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
+ hasBin: true
+
better-path-resolve@1.0.0:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
engines: {node: '>=4'}
@@ -2541,6 +2659,11 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browserslist@4.27.0:
+ resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
bson-objectid@2.0.4:
resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==}
@@ -2604,6 +2727,9 @@ packages:
caniuse-lite@1.0.30001741:
resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==}
+ caniuse-lite@1.0.30001754:
+ resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==}
+
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -2991,6 +3117,9 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ electron-to-chromium@1.5.249:
+ resolution: {integrity: sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -3000,6 +3129,10 @@ packages:
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+ enhanced-resolve@5.18.3:
+ resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
+ engines: {node: '>=10.13.0'}
+
enquirer@2.4.1:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
@@ -3493,6 +3626,9 @@ packages:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
fs-extra@7.0.1:
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
engines: {node: '>=6 <7 || >=8'}
@@ -3913,6 +4049,10 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
jose@5.9.6:
resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==}
@@ -4020,6 +4160,76 @@ packages:
cpu: [x64, arm64, wasm32]
os: [darwin, linux, win32]
+ lightningcss-android-arm64@1.30.2:
+ resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.30.2:
+ resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.30.2:
+ resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.30.2:
+ resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.30.2:
+ resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.30.2:
+ resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.30.2:
+ resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.30.2:
+ resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.30.2:
+ resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.30.2:
+ resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.30.2:
+ resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ engines: {node: '>= 12.0.0'}
+
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
@@ -4057,6 +4267,9 @@ packages:
magic-string@0.30.19:
resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
@@ -4352,6 +4565,9 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
noms@0.0.0:
resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==}
@@ -4359,6 +4575,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
normalize-url@8.1.0:
resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==}
engines: {node: '>=14.16'}
@@ -4626,6 +4846,9 @@ packages:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
postcss@8.4.31:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
@@ -5209,6 +5432,13 @@ packages:
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
+ tailwindcss@4.1.17:
+ resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
@@ -5405,6 +5635,12 @@ packages:
resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
engines: {node: '>=8'}
+ update-browserslist-db@1.1.4:
+ resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -5631,6 +5867,8 @@ packages:
snapshots:
+ '@alloc/quick-lru@5.2.0': {}
+
'@apidevtools/json-schema-ref-parser@11.9.3':
dependencies:
'@jsdevtools/ono': 7.1.3
@@ -6253,25 +6491,25 @@ snapshots:
'@esbuild/win32-x64@0.25.9':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.14.0)':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.14.0(jiti@2.6.1))':
dependencies:
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
- '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0)':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.6.1))':
dependencies:
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint-react/ast@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/ast@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.2)
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
birecord: 0.1.1
string-ts: 2.2.1
ts-pattern: 5.8.0
@@ -6280,18 +6518,18 @@ snapshots:
- supports-color
- typescript
- '@eslint-react/core@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/core@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
birecord: 0.1.1
short-unique-id: 5.3.2
ts-pattern: 5.8.0
@@ -6300,46 +6538,46 @@ snapshots:
- supports-color
- typescript
- '@eslint-react/eslint-plugin@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/eslint-plugin@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
- eslint-plugin-react-debug: 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-dom: 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-hooks-extra: 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-naming-convention: 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-web-api: 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-x: 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
+ eslint-plugin-react-debug: 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-dom: 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-hooks-extra: 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-naming-convention: 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-web-api: 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-x: 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@eslint-react/jsx@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/jsx@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
ts-pattern: 5.8.0
transitivePeerDependencies:
- eslint
- supports-color
- typescript
- '@eslint-react/shared@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/shared@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@eslint-react/tools': 1.16.1
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
picomatch: 4.0.3
transitivePeerDependencies:
- eslint
@@ -6348,24 +6586,24 @@ snapshots:
'@eslint-react/tools@1.16.1': {}
- '@eslint-react/types@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/types@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@eslint-react/tools': 1.16.1
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
transitivePeerDependencies:
- eslint
- supports-color
- typescript
- '@eslint-react/var@1.16.1(eslint@9.14.0)(typescript@5.7.2)':
+ '@eslint-react/var@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
ts-pattern: 5.8.0
transitivePeerDependencies:
- eslint
@@ -6663,6 +6901,11 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.31
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
@@ -7221,26 +7464,26 @@ snapshots:
- sql.js
- sqlite3
- '@payloadcms/eslint-config@3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))':
+ '@payloadcms/eslint-config@3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)':
dependencies:
- '@eslint-react/eslint-plugin': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/eslint-plugin': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint/js': 9.14.0
- '@payloadcms/eslint-plugin': 3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))
+ '@payloadcms/eslint-plugin': 3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)
'@types/eslint': 9.6.1
'@types/eslint__js': 8.42.3
- '@typescript-eslint/parser': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
- eslint-config-prettier: 9.1.0(eslint@9.14.0)
- eslint-plugin-import-x: 4.4.2(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-jest: 28.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-jest-dom: 5.4.0(eslint@9.14.0)
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0)
- eslint-plugin-perfectionist: 3.9.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-hooks: 5.0.0(eslint@9.14.0)
- eslint-plugin-regexp: 2.6.0(eslint@9.14.0)
+ '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
+ eslint-config-prettier: 9.1.0(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-import-x: 4.4.2(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-jest: 28.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-jest-dom: 5.4.0(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-perfectionist: 3.9.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-hooks: 5.0.0(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-regexp: 2.6.0(eslint@9.14.0(jiti@2.6.1))
globals: 15.12.0
typescript: 5.7.2
- typescript-eslint: 8.14.0(eslint@9.14.0)(typescript@5.7.2)
+ typescript-eslint: 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
transitivePeerDependencies:
- '@testing-library/dom'
- '@typescript-eslint/eslint-plugin'
@@ -7252,25 +7495,25 @@ snapshots:
- svelte-eslint-parser
- vue-eslint-parser
- '@payloadcms/eslint-plugin@3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))':
+ '@payloadcms/eslint-plugin@3.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)':
dependencies:
- '@eslint-react/eslint-plugin': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/eslint-plugin': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint/js': 9.14.0
'@types/eslint': 9.6.1
'@types/eslint__js': 8.42.3
- '@typescript-eslint/parser': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
- eslint-config-prettier: 9.1.0(eslint@9.14.0)
- eslint-plugin-import-x: 4.4.2(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-jest: 28.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-jest-dom: 5.4.0(eslint@9.14.0)
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0)
- eslint-plugin-perfectionist: 3.9.1(eslint@9.14.0)(typescript@5.7.2)
- eslint-plugin-react-hooks: 5.0.0(eslint@9.14.0)
- eslint-plugin-regexp: 2.6.0(eslint@9.14.0)
+ '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
+ eslint-config-prettier: 9.1.0(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-import-x: 4.4.2(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-jest: 28.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-jest-dom: 5.4.0(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-perfectionist: 3.9.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint-plugin-react-hooks: 5.0.0(eslint@9.14.0(jiti@2.6.1))
+ eslint-plugin-regexp: 2.6.0(eslint@9.14.0(jiti@2.6.1))
globals: 15.12.0
typescript: 5.7.2
- typescript-eslint: 8.14.0(eslint@9.14.0)(typescript@5.7.2)
+ typescript-eslint: 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
transitivePeerDependencies:
- '@testing-library/dom'
- '@typescript-eslint/eslint-plugin'
@@ -7575,6 +7818,75 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
+ '@tailwindcss/node@4.1.17':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.18.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.1.17
+
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide@4.1.17':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.1.17
+ '@tailwindcss/oxide-darwin-arm64': 4.1.17
+ '@tailwindcss/oxide-darwin-x64': 4.1.17
+ '@tailwindcss/oxide-freebsd-x64': 4.1.17
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.17
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.17
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.17
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.17
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.17
+
+ '@tailwindcss/postcss@4.1.17':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.1.17
+ '@tailwindcss/oxide': 4.1.17
+ postcss: 8.5.6
+ tailwindcss: 4.1.17
+
'@tokenizer/inflate@0.2.7':
dependencies:
debug: 4.4.1
@@ -7685,15 +7997,15 @@ snapshots:
dependencies:
'@types/node': 22.18.1
- '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0)(typescript@5.7.2))(eslint@9.14.0)(typescript@5.7.2)':
+ '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2))(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.14.0
- '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
- '@typescript-eslint/utils': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.14.0
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@@ -7703,15 +8015,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3)':
+ '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
- '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.43.0
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -7720,27 +8032,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.14.0(eslint@9.14.0)(typescript@5.7.2)':
+ '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.14.0
'@typescript-eslint/types': 8.14.0
'@typescript-eslint/typescript-estree': 8.14.0(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.14.0
debug: 4.4.1
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3)':
+ '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.43.0
debug: 4.4.1
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -7781,10 +8093,10 @@ snapshots:
dependencies:
typescript: 5.7.3
- '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0)(typescript@5.7.2)':
+ '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.14.0(typescript@5.7.2)
- '@typescript-eslint/utils': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
debug: 4.4.1
ts-api-utils: 1.4.3(typescript@5.7.2)
optionalDependencies:
@@ -7793,25 +8105,25 @@ snapshots:
- eslint
- supports-color
- '@typescript-eslint/type-utils@8.43.0(eslint@9.14.0)(typescript@5.7.2)':
+ '@typescript-eslint/type-utils@8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.2)
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
debug: 4.4.1
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.7.2)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0)(typescript@5.7.3)':
+ '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
- '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
debug: 4.4.1
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
@@ -7868,35 +8180,35 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.14.0(eslint@9.14.0)(typescript@5.7.2)':
+ '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.14.0
'@typescript-eslint/types': 8.14.0
'@typescript-eslint/typescript-estree': 8.14.0(typescript@5.7.2)
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/utils@8.43.0(eslint@9.14.0)(typescript@5.7.2)':
+ '@typescript-eslint/utils@8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.2)
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.43.0(eslint@9.35.0)(typescript@5.7.3)':
+ '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -7978,13 +8290,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2))':
+ '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.19
optionalDependencies:
- vite: 7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)
+ vite: 7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -8231,6 +8543,16 @@ snapshots:
atomic-sleep@1.0.0: {}
+ autoprefixer@10.4.21(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.27.0
+ caniuse-lite: 1.0.30001741
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
@@ -8261,6 +8583,8 @@ snapshots:
base64-js@1.5.1: {}
+ baseline-browser-mapping@2.8.25: {}
+
better-path-resolve@1.0.0:
dependencies:
is-windows: 1.0.2
@@ -8295,6 +8619,14 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ browserslist@4.27.0:
+ dependencies:
+ baseline-browser-mapping: 2.8.25
+ caniuse-lite: 1.0.30001754
+ electron-to-chromium: 1.5.249
+ node-releases: 2.0.27
+ update-browserslist-db: 1.1.4(browserslist@4.27.0)
+
bson-objectid@2.0.4: {}
bson@6.10.4: {}
@@ -8355,6 +8687,8 @@ snapshots:
caniuse-lite@1.0.30001741: {}
+ caniuse-lite@1.0.30001754: {}
+
ccount@2.0.1: {}
chai@5.3.3:
@@ -8631,6 +8965,8 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ electron-to-chromium@1.5.249: {}
+
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
@@ -8639,6 +8975,11 @@ snapshots:
dependencies:
once: 1.4.0
+ enhanced-resolve@5.18.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
enquirer@2.4.1:
dependencies:
ansi-colors: 4.1.3
@@ -8871,19 +9212,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.4.4(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3):
+ eslint-config-next@15.4.4(eslint-plugin-import-x@4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3):
dependencies:
'@next/eslint-plugin-next': 15.4.4
'@rushstack/eslint-patch': 1.12.0
- '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3)
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
- eslint: 9.35.0
+ '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
+ eslint: 9.35.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0))(eslint@9.35.0)
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0)
- eslint-plugin-react: 7.37.5(eslint@9.35.0)
- eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0)
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-plugin-import@2.32.0)(eslint@9.35.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0(jiti@2.6.1))
+ eslint-plugin-react: 7.37.5(eslint@9.35.0(jiti@2.6.1))
+ eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0(jiti@2.6.1))
optionalDependencies:
typescript: 5.7.3
transitivePeerDependencies:
@@ -8891,9 +9232,9 @@ snapshots:
- eslint-plugin-import-x
- supports-color
- eslint-config-prettier@9.1.0(eslint@9.14.0):
+ eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@2.6.1)):
dependencies:
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -8903,39 +9244,39 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-plugin-import@2.32.0)(eslint@9.35.0(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.1
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
get-tsconfig: 4.10.1
is-bun-module: 2.0.0
stable-hash: 0.0.5
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0))(eslint@9.35.0)
- eslint-plugin-import-x: 4.4.2(eslint@9.35.0)(typescript@5.7.3)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.6.1))
+ eslint-plugin-import-x: 4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0))(eslint@9.35.0):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
- eslint: 9.35.0
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
+ eslint: 9.35.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0)
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-plugin-import@2.32.0)(eslint@9.35.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import-x@4.4.2(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-import-x@4.4.2(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
debug: 4.4.1
doctrine: 3.0.0
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
get-tsconfig: 4.10.1
is-glob: 4.0.3
@@ -8947,12 +9288,12 @@ snapshots:
- supports-color
- typescript
- eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3):
+ eslint-plugin-import-x@4.4.2(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3):
dependencies:
- '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
debug: 4.4.1
doctrine: 3.0.0
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
get-tsconfig: 4.10.1
is-glob: 4.0.3
@@ -8965,7 +9306,7 @@ snapshots:
- typescript
optional: true
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0))(eslint@9.35.0):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -8974,9 +9315,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.4.2(eslint@9.35.0)(typescript@5.7.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0))(eslint@9.35.0))(eslint@9.35.0)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -8988,29 +9329,29 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jest-dom@5.4.0(eslint@9.14.0):
+ eslint-plugin-jest-dom@5.4.0(eslint@9.14.0(jiti@2.6.1)):
dependencies:
'@babel/runtime': 7.28.4
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
requireindex: 1.2.0
- eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3))(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.7.3))(eslint@9.35.0)(typescript@5.7.3)
+ '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.7.3)
transitivePeerDependencies:
- supports-color
- typescript
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.14.0):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.14.0(jiti@2.6.1)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -9020,7 +9361,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -9029,7 +9370,7 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0(jiti@2.6.1)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -9039,7 +9380,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -9048,31 +9389,31 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-perfectionist@3.9.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-perfectionist@3.9.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
minimatch: 9.0.5
natural-compare-lite: 1.4.0
transitivePeerDependencies:
- supports-color
- typescript
- eslint-plugin-react-debug@1.16.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-react-debug@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/core': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/core': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
string-ts: 2.2.1
ts-pattern: 5.8.0
optionalDependencies:
@@ -9080,114 +9421,114 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-dom@1.16.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-react-dom@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/core': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/core': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
ts-pattern: 5.8.0
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-hooks-extra@1.16.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-react-hooks-extra@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/core': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/core': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
ts-pattern: 5.8.0
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-hooks@5.0.0(eslint@9.14.0):
+ eslint-plugin-react-hooks@5.0.0(eslint@9.14.0(jiti@2.6.1)):
dependencies:
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
- eslint-plugin-react-hooks@5.2.0(eslint@9.35.0):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.35.0(jiti@2.6.1)):
dependencies:
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
- eslint-plugin-react-naming-convention@1.16.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-react-naming-convention@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/core': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/core': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
ts-pattern: 5.8.0
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-web-api@1.16.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-react-web-api@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/core': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/core': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
birecord: 0.1.1
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
ts-pattern: 5.8.0
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-x@1.16.1(eslint@9.14.0)(typescript@5.7.2):
+ eslint-plugin-react-x@1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@eslint-react/ast': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/core': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/jsx': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/shared': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/ast': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/core': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/jsx': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/shared': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@eslint-react/tools': 1.16.1
- '@eslint-react/types': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
- '@eslint-react/var': 1.16.1(eslint@9.14.0)(typescript@5.7.2)
+ '@eslint-react/types': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@eslint-react/var': 1.16.1(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
'@typescript-eslint/types': 8.43.0
- '@typescript-eslint/utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
- is-immutable-type: 5.0.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
+ is-immutable-type: 5.0.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
ts-pattern: 5.8.0
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- eslint-plugin-react@7.37.5(eslint@9.35.0):
+ eslint-plugin-react@7.37.5(eslint@9.35.0(jiti@2.6.1)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
@@ -9195,7 +9536,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.35.0
+ eslint: 9.35.0(jiti@2.6.1)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -9209,12 +9550,12 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-regexp@2.6.0(eslint@9.14.0):
+ eslint-plugin-regexp@2.6.0(eslint@9.14.0(jiti@2.6.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.1
comment-parser: 1.4.1
- eslint: 9.14.0
+ eslint: 9.14.0(jiti@2.6.1)
jsdoc-type-pratt-parser: 4.8.0
refa: 0.12.1
regexp-ast-analysis: 0.7.1
@@ -9229,9 +9570,9 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.14.0:
+ eslint@9.14.0(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.14.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.18.0
'@eslint/core': 0.7.0
@@ -9266,12 +9607,14 @@ snapshots:
natural-compare: 1.4.0
optionator: 0.9.4
text-table: 0.2.0
+ optionalDependencies:
+ jiti: 2.6.1
transitivePeerDependencies:
- supports-color
- eslint@9.35.0:
+ eslint@9.35.0(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
@@ -9306,6 +9649,8 @@ snapshots:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.6.1
transitivePeerDependencies:
- supports-color
@@ -9496,6 +9841,8 @@ snapshots:
dependencies:
fetch-blob: 3.2.0
+ fraction.js@4.3.7: {}
+
fs-extra@7.0.1:
dependencies:
graceful-fs: 4.2.11
@@ -9813,10 +10160,10 @@ snapshots:
is-hexadecimal@2.0.1: {}
- is-immutable-type@5.0.0(eslint@9.14.0)(typescript@5.7.2):
+ is-immutable-type@5.0.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0)(typescript@5.7.2)
- eslint: 9.14.0
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ eslint: 9.14.0(jiti@2.6.1)
ts-api-utils: 1.4.3(typescript@5.7.2)
ts-declaration-location: 1.0.7(typescript@5.7.2)
typescript: 5.7.2
@@ -9912,6 +10259,8 @@ snapshots:
has-symbols: 1.1.0
set-function-name: 2.0.2
+ jiti@2.6.1: {}
+
jose@5.9.6: {}
joycon@3.1.1: {}
@@ -10014,6 +10363,55 @@ snapshots:
'@libsql/linux-x64-musl': 0.4.7
'@libsql/win32-x64-msvc': 0.4.7
+ lightningcss-android-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-x64@1.30.2:
+ optional: true
+
+ lightningcss-freebsd-x64@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.30.2:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.30.2:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.30.2:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.30.2:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.30.2:
+ optional: true
+
+ lightningcss@1.30.2:
+ dependencies:
+ detect-libc: 2.0.4
+ optionalDependencies:
+ lightningcss-android-arm64: 1.30.2
+ lightningcss-darwin-arm64: 1.30.2
+ lightningcss-darwin-x64: 1.30.2
+ lightningcss-freebsd-x64: 1.30.2
+ lightningcss-linux-arm-gnueabihf: 1.30.2
+ lightningcss-linux-arm64-gnu: 1.30.2
+ lightningcss-linux-arm64-musl: 1.30.2
+ lightningcss-linux-x64-gnu: 1.30.2
+ lightningcss-linux-x64-musl: 1.30.2
+ lightningcss-win32-arm64-msvc: 1.30.2
+ lightningcss-win32-x64-msvc: 1.30.2
+
lines-and-columns@1.2.4: {}
locate-path@5.0.0:
@@ -10044,6 +10442,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
make-dir@3.1.0:
dependencies:
semver: 6.3.1
@@ -10460,6 +10862,8 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
+ node-releases@2.0.27: {}
+
noms@0.0.0:
dependencies:
inherits: 2.0.4
@@ -10467,6 +10871,8 @@ snapshots:
normalize-path@3.0.0: {}
+ normalize-range@0.1.2: {}
+
normalize-url@8.1.0: {}
npm-run-path@4.0.1:
@@ -10792,6 +11198,8 @@ snapshots:
possible-typed-array-names@1.1.0: {}
+ postcss-value-parser@4.2.0: {}
+
postcss@8.4.31:
dependencies:
nanoid: 3.3.11
@@ -11469,6 +11877,10 @@ snapshots:
tabbable@6.2.0: {}
+ tailwindcss@4.1.17: {}
+
+ tapable@2.3.0: {}
+
tar-stream@3.1.7:
dependencies:
b4a: 1.7.1
@@ -11621,11 +12033,11 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript-eslint@8.14.0(eslint@9.14.0)(typescript@5.7.2):
+ typescript-eslint@8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0)(typescript@5.7.2))(eslint@9.14.0)(typescript@5.7.2)
- '@typescript-eslint/parser': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
- '@typescript-eslint/utils': 8.14.0(eslint@9.14.0)(typescript@5.7.2)
+ '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2))(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.6.1))(typescript@5.7.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
@@ -11703,6 +12115,12 @@ snapshots:
untildify@4.0.0: {}
+ update-browserslist-db@1.1.4(browserslist@4.27.0):
+ dependencies:
+ browserslist: 4.27.0
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
@@ -11731,13 +12149,13 @@ snapshots:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
- vite-node@3.2.4(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2):
+ vite-node@3.2.4(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2):
dependencies:
cac: 6.7.14
debug: 4.4.1
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)
+ vite: 7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -11752,18 +12170,18 @@ snapshots:
- tsx
- yaml
- vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)):
+ vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)):
dependencies:
debug: 4.4.1
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.7.3)
optionalDependencies:
- vite: 7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)
+ vite: 7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)
transitivePeerDependencies:
- supports-color
- typescript
- vite@7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2):
+ vite@7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
@@ -11774,14 +12192,16 @@ snapshots:
optionalDependencies:
'@types/node': 22.18.1
fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
sass: 1.77.4
tsx: 4.19.2
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2))
+ '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -11799,8 +12219,8 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 7.1.5(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)
- vite-node: 3.2.4(@types/node@22.18.1)(sass@1.77.4)(tsx@4.19.2)
+ vite: 7.1.5(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)
+ vite-node: 3.2.4(@types/node@22.18.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.19.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12