mirror of
https://github.com/pacnpal/thrillwiki_laravel.git
synced 2025-12-20 03:51:10 -05:00
feat: create designers table and update Park model to use Operator for ownership
This commit is contained in:
128
README.md
128
README.md
@@ -1,66 +1,106 @@
|
|||||||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
|
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
|
||||||
|
|
||||||
<p align="center">
|
# ThrillWiki - Laravel/Livewire Implementation
|
||||||
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## About Laravel
|
This is the Laravel/Livewire implementation of ThrillWiki, maintaining feature parity with the original Django project.
|
||||||
|
|
||||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
## Prerequisites
|
||||||
|
|
||||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
- PHP 8.1 or higher
|
||||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
- PostgreSQL
|
||||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
- Node.js and npm
|
||||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
- Composer
|
||||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
|
||||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
|
||||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
|
||||||
|
|
||||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
## Setup Instructions
|
||||||
|
|
||||||
## Learning Laravel
|
### 1. Environment Configuration
|
||||||
|
|
||||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
|
```bash
|
||||||
|
# Copy the example environment file
|
||||||
|
cp .env.example .env
|
||||||
|
|
||||||
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
|
# Generate application key
|
||||||
|
php artisan key:generate
|
||||||
|
```
|
||||||
|
|
||||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
Configure your `.env` file with the following essential settings:
|
||||||
|
|
||||||
## Laravel Sponsors
|
```env
|
||||||
|
DB_CONNECTION=pgsql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_DATABASE=thrillwiki
|
||||||
|
DB_USERNAME=your_username
|
||||||
|
DB_PASSWORD=your_password
|
||||||
|
```
|
||||||
|
|
||||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
|
### 2. Database Setup
|
||||||
|
|
||||||
### Premium Partners
|
1. Create PostgreSQL database:
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE thrillwiki;
|
||||||
|
```
|
||||||
|
|
||||||
- **[Vehikl](https://vehikl.com/)**
|
2. Run migrations and seed the database:
|
||||||
- **[Tighten Co.](https://tighten.co)**
|
```bash
|
||||||
- **[WebReinvent](https://webreinvent.com/)**
|
php artisan migrate:fresh --seed
|
||||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
```
|
||||||
- **[64 Robots](https://64robots.com)**
|
|
||||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
|
|
||||||
- **[Cyber-Duck](https://cyber-duck.co.uk)**
|
|
||||||
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
|
|
||||||
- **[Jump24](https://jump24.co.uk)**
|
|
||||||
- **[Redberry](https://redberry.international/laravel/)**
|
|
||||||
- **[Active Logic](https://activelogic.com)**
|
|
||||||
- **[byte5](https://byte5.de)**
|
|
||||||
- **[OP.GG](https://op.gg)**
|
|
||||||
|
|
||||||
## Contributing
|
### 3. Install Dependencies
|
||||||
|
|
||||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
```bash
|
||||||
|
# Install PHP dependencies
|
||||||
|
composer install
|
||||||
|
|
||||||
## Code of Conduct
|
# Install Node.js dependencies
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
### 4. Start Development Servers
|
||||||
|
|
||||||
## Security Vulnerabilities
|
Run these commands in separate terminal windows:
|
||||||
|
|
||||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
```bash
|
||||||
|
# Start Laravel development server
|
||||||
|
php artisan serve
|
||||||
|
|
||||||
## License
|
# Start Vite development server for asset compilation
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
For production:
|
||||||
|
```bash
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Clear Cache (If Needed)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php artisan cache:clear && php artisan config:clear && php artisan route:clear && php artisan view:clear
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
1. **Assets Not Loading**
|
||||||
|
- Ensure Vite is running (`npm run dev`)
|
||||||
|
- For production, make sure assets are built (`npm run build`)
|
||||||
|
|
||||||
|
2. **Database Connection Issues**
|
||||||
|
- Verify PostgreSQL is running
|
||||||
|
- Check credentials in `.env` file
|
||||||
|
- Ensure database exists and is accessible
|
||||||
|
|
||||||
|
3. **Migration Errors**
|
||||||
|
- Check migration order in `database/migrations`
|
||||||
|
- Ensure database is empty when running `migrate:fresh`
|
||||||
|
|
||||||
|
## Development Guidelines
|
||||||
|
|
||||||
|
This implementation maintains strict feature parity with the original Django project. Key requirements:
|
||||||
|
|
||||||
|
- Feature-to-Feature matching with Django implementation
|
||||||
|
- Identical API responses and data structures
|
||||||
|
- Consistent UI/UX with original
|
||||||
|
- Test coverage matching Django functionality
|
||||||
|
|
||||||
|
For detailed development guidelines, refer to the project documentation.
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace App\Models;
|
|||||||
|
|
||||||
use App\Enums\ParkStatus;
|
use App\Enums\ParkStatus;
|
||||||
use App\Traits\HasLocation;
|
use App\Traits\HasLocation;
|
||||||
|
use App\Models\Operator;
|
||||||
use App\Traits\HasSlugHistory;
|
use App\Traits\HasSlugHistory;
|
||||||
use App\Traits\HasParkStatistics;
|
use App\Traits\HasParkStatistics;
|
||||||
use App\Traits\TrackedModel;
|
use App\Traits\TrackedModel;
|
||||||
@@ -12,7 +13,6 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use App\Models\Company;
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
|
||||||
class Park extends Model
|
class Park extends Model
|
||||||
@@ -86,9 +86,18 @@ class Park extends Model
|
|||||||
/**
|
/**
|
||||||
* Get the operator that owns the park.
|
* Get the operator that owns the park.
|
||||||
*/
|
*/
|
||||||
|
public function operator(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Operator::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the owner that owns the park.
|
||||||
|
* @deprecated Use operator() relationship instead until Company model is implemented
|
||||||
|
*/
|
||||||
public function owner(): BelongsTo
|
public function owner(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Company::class, 'owner_id');
|
return $this->belongsTo(Operator::class, 'owner_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
1100
composer.lock
generated
1100
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('designers', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('name');
|
||||||
|
$table->string('slug')->unique();
|
||||||
|
$table->text('bio')->default('');
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
// Index for faster lookups
|
||||||
|
$table->index('slug');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('designers');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,36 +1,20 @@
|
|||||||
|
# Active Context
|
||||||
|
|
||||||
## Current Session Context
|
## Current Session Context
|
||||||
[2025-02-26 20:41]
|
2025-03-23 15:08
|
||||||
|
|
||||||
### Recent Changes
|
## Recent Changes
|
||||||
- Implemented Designer model and admin interface
|
- Fixed undefined operator relationship error in Park model
|
||||||
- Created admin and moderation panel separation
|
- Added operator() relationship to Park model
|
||||||
- Set up role-based permissions system
|
- Temporarily mapped owner() relationship to use Operator model until Company model is implemented
|
||||||
- Added relationship management for rides
|
- Added @deprecated tag to owner() relationship
|
||||||
- Configured resource layouts and validations
|
- Added Operator model import
|
||||||
|
|
||||||
### Current Progress
|
## Current Goals
|
||||||
- Completed core Designer implementation
|
- Implement companies module (future task)
|
||||||
- Established permission structure
|
- Create Company model for proper park ownership relationships
|
||||||
- Set up admin panel configuration
|
- Migrate park ownership data from Operator to Company model once implemented
|
||||||
- Created moderation interface foundation
|
|
||||||
|
|
||||||
### Next Tasks
|
## Open Questions
|
||||||
1. History Tracking
|
- Should we prioritize the companies module implementation to properly separate operator and owner relationships?
|
||||||
- Set up model history tracking
|
- What data migration strategy should we use when transitioning from Operator to Company ownership?
|
||||||
- Configure audit logging
|
|
||||||
- Implement change tracking
|
|
||||||
|
|
||||||
2. Moderation Tools
|
|
||||||
- Create content review workflow
|
|
||||||
- Add moderation queue
|
|
||||||
- Set up notification system
|
|
||||||
|
|
||||||
3. Testing & Documentation
|
|
||||||
- Write feature tests
|
|
||||||
- Document permission structure
|
|
||||||
- Create admin guide
|
|
||||||
|
|
||||||
### Open Questions
|
|
||||||
1. Should we implement soft deletes for Designers?
|
|
||||||
2. How should we handle duplicate designer names?
|
|
||||||
3. Do we need version control for designer descriptions?
|
|
||||||
136
memory-bank/components/SearchComponents.md
Normal file
136
memory-bank/components/SearchComponents.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
# Search Components Documentation
|
||||||
|
|
||||||
|
## AutocompleteComponent
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- Real-time suggestions with 300ms debounce
|
||||||
|
- Keyboard navigation (up/down/enter)
|
||||||
|
- Dark mode compatibility
|
||||||
|
- Mobile-responsive design
|
||||||
|
- Accessibility support (ARIA labels, roles)
|
||||||
|
|
||||||
|
### Keyboard Shortcuts
|
||||||
|
- `↑` - Navigate to previous suggestion
|
||||||
|
- `↓` - Navigate to next suggestion
|
||||||
|
- `Enter` - Select current suggestion
|
||||||
|
- `Esc` - Clear and close suggestions
|
||||||
|
|
||||||
|
### Usage Example
|
||||||
|
```php
|
||||||
|
<livewire:autocomplete-component
|
||||||
|
:endpoint="route('api.search.suggestions')"
|
||||||
|
:placeholder="'Search for rides, parks...'"
|
||||||
|
/>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Integration with SearchComponent
|
||||||
|
The AutocompleteComponent works seamlessly with SearchComponent through:
|
||||||
|
1. Event communication for selected suggestions
|
||||||
|
2. Shared state management
|
||||||
|
3. Coordinated filter updates
|
||||||
|
|
||||||
|
## SearchComponent
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- Real-time filtering
|
||||||
|
- Multiple filter combinations
|
||||||
|
- State persistence
|
||||||
|
- Dark mode support
|
||||||
|
- Mobile-responsive layout
|
||||||
|
|
||||||
|
### Filter Combinations
|
||||||
|
Valid filter combinations include:
|
||||||
|
- Type (park, ride, area)
|
||||||
|
- Location (country, region)
|
||||||
|
- Status (open, closed, planned)
|
||||||
|
- Category (specific to type)
|
||||||
|
|
||||||
|
### Mobile Responsiveness
|
||||||
|
- Collapsible filter panel
|
||||||
|
- Touch-friendly inputs
|
||||||
|
- Responsive grid layout
|
||||||
|
- Optimized for various screen sizes
|
||||||
|
|
||||||
|
### Dark Mode Implementation
|
||||||
|
- Consistent with system theme
|
||||||
|
- Maintains contrast ratios
|
||||||
|
- Preserves readability
|
||||||
|
- Smooth transitions
|
||||||
|
|
||||||
|
### Performance Considerations
|
||||||
|
- 300ms debounce on search input
|
||||||
|
- Optimized query execution
|
||||||
|
- Minimal re-renders
|
||||||
|
- Efficient state updates
|
||||||
|
|
||||||
|
## Accessibility Features
|
||||||
|
|
||||||
|
### ARIA Attributes
|
||||||
|
- `aria-expanded`: Indicates suggestion panel state
|
||||||
|
- `aria-activedescendant`: Identifies active suggestion
|
||||||
|
- `aria-controls`: Links input to suggestions
|
||||||
|
- `role="combobox"`: Identifies autocomplete input
|
||||||
|
- `role="listbox"`: Identifies suggestions list
|
||||||
|
|
||||||
|
### Keyboard Support
|
||||||
|
- Full keyboard navigation
|
||||||
|
- Focus management
|
||||||
|
- Skip links
|
||||||
|
- Clear focus indicators
|
||||||
|
|
||||||
|
### Screen Reader Support
|
||||||
|
- Meaningful labels
|
||||||
|
- Status announcements
|
||||||
|
- Clear instructions
|
||||||
|
- Error notifications
|
||||||
|
|
||||||
|
## API Integration
|
||||||
|
|
||||||
|
### Endpoints
|
||||||
|
1. `/api/search/suggestions`
|
||||||
|
- Returns autocomplete suggestions
|
||||||
|
- Parameters: query, type, limit
|
||||||
|
- Response: JSON array of matches
|
||||||
|
|
||||||
|
2. `/api/search`
|
||||||
|
- Performs full search
|
||||||
|
- Parameters: query, filters, page
|
||||||
|
- Response: Paginated results
|
||||||
|
|
||||||
|
### Response Format
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": [...],
|
||||||
|
"meta": {
|
||||||
|
"total": 100,
|
||||||
|
"per_page": 15,
|
||||||
|
"current_page": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing Guidelines
|
||||||
|
|
||||||
|
### Filter Testing
|
||||||
|
1. Test all possible filter combinations
|
||||||
|
2. Verify filter state persistence
|
||||||
|
3. Check filter reset functionality
|
||||||
|
4. Validate filter validation rules
|
||||||
|
|
||||||
|
### Keyboard Navigation Testing
|
||||||
|
1. Test arrow key navigation
|
||||||
|
2. Verify enter key selection
|
||||||
|
3. Check escape key behavior
|
||||||
|
4. Validate focus management
|
||||||
|
|
||||||
|
### Mobile Testing
|
||||||
|
1. Test on various screen sizes
|
||||||
|
2. Verify touch interactions
|
||||||
|
3. Check responsive layouts
|
||||||
|
4. Validate filter panel behavior
|
||||||
|
|
||||||
|
### Dark Mode Testing
|
||||||
|
1. Test theme switching
|
||||||
|
2. Verify color contrast
|
||||||
|
3. Check transition effects
|
||||||
|
4. Validate component states
|
||||||
@@ -1,134 +1,23 @@
|
|||||||
# Decision Log
|
# Decision Log
|
||||||
|
|
||||||
## [2025-02-26] - Documentation System Enhancement
|
## 2025-03-23 - Temporary Park Owner Relationship
|
||||||
|
**Context:** The Park model had an undefined relationship with Company model, which is part of the companies module that hasn't been implemented yet. This was causing errors when trying to access the operator relationship.
|
||||||
|
|
||||||
### Handoffs System Integration
|
**Decision:** Temporarily use the Operator model for both operator() and owner() relationships until the Company model is implemented.
|
||||||
**Context:** Discovered valuable documentation patterns in RooCode-Tips-Tricks that could enhance our current memory bank system, particularly for managing extended development sessions and preserving detailed context.
|
|
||||||
|
|
||||||
**Decision:** Integrate the Handoffs System alongside our Memory Bank, implementing:
|
|
||||||
1. Sequential handoff documents for daily development progress
|
|
||||||
2. Milestone summaries for completed project phases
|
|
||||||
3. Structured handoff directory organization
|
|
||||||
4. Clear documentation of context transitions
|
|
||||||
|
|
||||||
**Rationale:**
|
**Rationale:**
|
||||||
1. Complements Memory Bank with chronological development history
|
- The companies module is listed in the project structure but not yet implemented
|
||||||
2. Preserves detailed context without summarization loss
|
- Parks need a working owner relationship for current functionality
|
||||||
3. Enables selective context loading for optimal performance
|
- Operator model provides similar functionality for now
|
||||||
4. Provides clear project timeline documentation
|
|
||||||
5. Facilitates clean context switches for better problem-solving
|
|
||||||
|
|
||||||
**Implementation:**
|
**Implementation:**
|
||||||
1. Create handoffs/ directory structure:
|
1. Added operator() relationship to Park model
|
||||||
- 0-instructions/ for system documentation
|
2. Temporarily mapped owner() relationship to use Operator model
|
||||||
- Numbered milestone directories
|
3. Added @deprecated tag to owner() relationship to indicate it's temporary
|
||||||
- Sequential handoff documents
|
4. Added Operator model import
|
||||||
2. Maintain both systems in parallel:
|
|
||||||
- Memory Bank for active project state
|
|
||||||
- Handoffs for historical context and transitions
|
|
||||||
3. Document clear guidelines for when to create:
|
|
||||||
- Handoffs (after significant progress)
|
|
||||||
- Milestones (after 3-5 handoffs)
|
|
||||||
|
|
||||||
## [2025-02-26] - Implementation Priority Structure
|
**Future Work:**
|
||||||
|
- Implement companies module
|
||||||
### Core Implementation Order
|
- Create proper Company model
|
||||||
**Context:** Need to establish a clear order for implementing remaining features while maintaining system stability and feature parity.
|
- Update owner() relationship to use Company model
|
||||||
|
- Migrate any existing owner data from Operator to Company
|
||||||
**Decision:** Implement features in the following priority order:
|
|
||||||
1. Filament Admin Interface
|
|
||||||
2. History Tracking System
|
|
||||||
3. Email Service Foundation
|
|
||||||
4. Companies Module
|
|
||||||
5. Analytics System
|
|
||||||
6. Wiki System
|
|
||||||
|
|
||||||
**Rationale:**
|
|
||||||
1. Admin interface is critical for system management and moderation
|
|
||||||
2. History tracking is required for audit trails and wiki functionality
|
|
||||||
3. Email service enables notifications and user communication
|
|
||||||
4. Each subsequent system builds on the previous components
|
|
||||||
|
|
||||||
**Implementation:**
|
|
||||||
- Start with Filament admin setup
|
|
||||||
- Implement history tracking early
|
|
||||||
- Build email service incrementally
|
|
||||||
- Add remaining features in order
|
|
||||||
|
|
||||||
### Technical Dependencies
|
|
||||||
|
|
||||||
**Context:** Need to manage dependencies between different system components effectively.
|
|
||||||
|
|
||||||
**Decision:** Established clear dependency chains:
|
|
||||||
- History tracking before wiki system
|
|
||||||
- Admin interface before moderation tools
|
|
||||||
- Email service before advanced notifications
|
|
||||||
- Analytics after core tracking systems
|
|
||||||
|
|
||||||
**Rationale:**
|
|
||||||
1. Prevents blocking dependencies
|
|
||||||
2. Ensures stable foundation
|
|
||||||
3. Allows incremental testing
|
|
||||||
4. Maintains clear development path
|
|
||||||
|
|
||||||
**Implementation:**
|
|
||||||
- Document dependencies in technical specs
|
|
||||||
- Create staged implementation plan
|
|
||||||
- Set up testing frameworks early
|
|
||||||
- Monitor inter-component dependencies
|
|
||||||
|
|
||||||
## [2025-02-25] - Search and Autocomplete Implementation
|
|
||||||
|
|
||||||
### Search Component Enhancement
|
|
||||||
**Context:** Need to implement autocomplete functionality while maintaining feature parity with Django implementation.
|
|
||||||
|
|
||||||
**Decision:** Created a separate AutocompleteComponent to handle suggestions and integrated it with the existing SearchComponent using Livewire events.
|
|
||||||
|
|
||||||
**Rationale:**
|
|
||||||
1. Separation of concerns - keeping autocomplete logic isolated
|
|
||||||
2. Reusability - component can be used in other search contexts
|
|
||||||
3. Maintainability - easier to test and modify each component independently
|
|
||||||
4. Performance - can optimize suggestion queries separately from main search
|
|
||||||
|
|
||||||
**Implementation:**
|
|
||||||
- Created AutocompleteComponent for suggestions
|
|
||||||
- Used Alpine.js for keyboard navigation
|
|
||||||
- Integrated with SearchComponent via Livewire events
|
|
||||||
- Maintained existing search functionality
|
|
||||||
- Added real-time filtering with debounce
|
|
||||||
|
|
||||||
### Technology Choices
|
|
||||||
|
|
||||||
**Context:** Need to implement interactive search features without adding JavaScript dependencies.
|
|
||||||
|
|
||||||
**Decision:** Used Livewire with Alpine.js (included by default) for all interactive features.
|
|
||||||
|
|
||||||
**Rationale:**
|
|
||||||
1. Follows project requirement to avoid additional JavaScript dependencies
|
|
||||||
2. Alpine.js comes with Livewire, so no extra setup needed
|
|
||||||
3. Provides necessary interactivity without compromising simplicity
|
|
||||||
4. Maintains consistent Laravel/Livewire architecture
|
|
||||||
|
|
||||||
**Implementation:**
|
|
||||||
- Used Livewire for component communication
|
|
||||||
- Leveraged Alpine.js for keyboard navigation
|
|
||||||
- Implemented real-time updates with wire:model.live
|
|
||||||
- Added debounce for performance optimization
|
|
||||||
|
|
||||||
### Component Communication
|
|
||||||
|
|
||||||
**Context:** Need to handle communication between AutocompleteComponent and SearchComponent.
|
|
||||||
|
|
||||||
**Decision:** Used Livewire events for component communication and state synchronization.
|
|
||||||
|
|
||||||
**Rationale:**
|
|
||||||
1. Events provide loose coupling between components
|
|
||||||
2. Maintains Livewire's reactive nature
|
|
||||||
3. Easy to debug and extend
|
|
||||||
4. Standard Laravel/Livewire pattern
|
|
||||||
|
|
||||||
**Implementation:**
|
|
||||||
- Added suggestion-selected event
|
|
||||||
- Implemented event handler in SearchComponent
|
|
||||||
- Synchronized search state between components
|
|
||||||
- Added proper event parameters (id, text)
|
|
||||||
@@ -156,9 +156,41 @@ Schema::create('photos', function (Blueprint $table) {
|
|||||||
- Fixed test cases to match the actual implementation
|
- Fixed test cases to match the actual implementation
|
||||||
- Ensured all tests pass with PostgreSQL database
|
- Ensured all tests pass with PostgreSQL database
|
||||||
|
|
||||||
|
## Statistics and Area Management
|
||||||
|
|
||||||
|
### 1. Enhanced Statistics
|
||||||
|
- Added comprehensive statistics tracking to both Park and ParkArea models
|
||||||
|
- Implemented area statistics (total, operating, closed areas)
|
||||||
|
- Added ride type statistics (coasters, flat rides, water rides)
|
||||||
|
- Added visitor statistics (capacity, wait times, satisfaction)
|
||||||
|
- Added historical data tracking (expansions, updates, retired rides)
|
||||||
|
- Added performance metrics (utilization, attendance, satisfaction)
|
||||||
|
|
||||||
|
### 2. Area Management
|
||||||
|
- Implemented nested areas support with parent-child relationships
|
||||||
|
- Added position handling for area ordering
|
||||||
|
- Added methods for managing area hierarchy
|
||||||
|
- Implemented area statistics rollup
|
||||||
|
- Added proper indexing for efficient queries
|
||||||
|
|
||||||
|
### 3. Database Structure
|
||||||
|
- Created migrations for adding statistics fields
|
||||||
|
- Added proper indexes for common queries
|
||||||
|
- Implemented efficient position handling
|
||||||
|
- Added parent-child relationship support
|
||||||
|
|
||||||
|
### 4. Model Features
|
||||||
|
- Added HasAreaStatistics trait for area-specific statistics
|
||||||
|
- Added HasParkStatistics trait for park-wide statistics
|
||||||
|
- Implemented methods for updating statistics
|
||||||
|
- Added scopes for filtering areas and parks
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
1. Create a controller for managing photos
|
1. Create a controller for managing photos
|
||||||
2. Implement file upload functionality
|
2. Implement file upload functionality
|
||||||
3. Update the park detail page to display photos
|
3. Update the park detail page to display photos
|
||||||
4. Create a photo gallery component
|
4. Create a photo gallery component
|
||||||
5. Add photo management UI
|
5. Add photo management UI
|
||||||
|
6. Implement statistics update jobs
|
||||||
|
7. Add area reordering UI
|
||||||
|
8. Create area management components
|
||||||
@@ -60,57 +60,43 @@
|
|||||||
- Added feature parity documentation
|
- Added feature parity documentation
|
||||||
- Enhanced search UX with real-time filtering
|
- Enhanced search UX with real-time filtering
|
||||||
|
|
||||||
|
### Documentation and Testing [2025-03-23]
|
||||||
|
- Created comprehensive SearchComponents.md documentation
|
||||||
|
- Documented keyboard shortcuts and navigation
|
||||||
|
- Added accessibility implementation details
|
||||||
|
- Created API integration guide
|
||||||
|
- Documented mobile responsiveness features
|
||||||
|
- Added testing guidelines for all features
|
||||||
|
- Verified dark mode consistency
|
||||||
|
- Tested filter combinations
|
||||||
|
- Validated keyboard navigation
|
||||||
|
|
||||||
|
### Parks Model Migration [2025-03-23]
|
||||||
|
- Implemented Park and ParkArea models with all required fields
|
||||||
|
- Added ParkStatus enum with helper methods
|
||||||
|
- Created migrations for basic fields and relationships
|
||||||
|
- Added statistics fields to both models
|
||||||
|
- Implemented nested areas support with position handling
|
||||||
|
- Added photo management functionality
|
||||||
|
- Created traits for common functionality (HasLocation, HasSlugHistory, HasParkStatistics)
|
||||||
|
- Added proper indexing for common queries
|
||||||
|
- Documented all enhancements in ParkModelEnhancements.md
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
|
||||||
### High Priority Tasks
|
### Immediate Tasks
|
||||||
1. Filament Admin Interface
|
1. Parks Implementation
|
||||||
- Install and configure Filament PHP
|
- Implement statistics update jobs
|
||||||
- Set up core admin resources
|
- Create area reordering UI
|
||||||
- Implement permission system
|
- Add area management components
|
||||||
- Create moderation tools
|
- Set up photo upload functionality
|
||||||
- Configure admin panels
|
- Create park detail pages
|
||||||
|
|
||||||
2. History Tracking System
|
2. Feature Completion
|
||||||
- Design history tracking architecture
|
- Complete unit test suite
|
||||||
- Implement model history tracking
|
- Add integration tests
|
||||||
- Set up audit logging
|
- Set up automated accessibility tests
|
||||||
- Create user activity tracking
|
- Implement performance monitoring
|
||||||
- Configure change tracking
|
|
||||||
|
|
||||||
3. Email Service Foundation
|
|
||||||
- Set up email infrastructure
|
|
||||||
- Create notification system
|
|
||||||
- Implement template management
|
|
||||||
- Configure queue system
|
|
||||||
|
|
||||||
### Documentation Tasks
|
|
||||||
1. Documentation System
|
|
||||||
- Begin using handoffs for daily progress
|
|
||||||
- Create first milestone after 3-5 handoffs
|
|
||||||
- Train team on handoff creation
|
|
||||||
- Document quality guidelines
|
|
||||||
- Monitor system effectiveness
|
|
||||||
|
|
||||||
2. Admin Documentation
|
|
||||||
- Document Filament integration
|
|
||||||
- Create admin system architecture docs
|
|
||||||
- Detail permission system
|
|
||||||
- Write setup guides
|
|
||||||
- Maintain handoffs during setup
|
|
||||||
|
|
||||||
3. Feature Parity Tracking
|
|
||||||
- Create feature comparison matrix
|
|
||||||
- Document implementation differences
|
|
||||||
- Track progress by module
|
|
||||||
- Note Laravel-specific enhancements
|
|
||||||
- Use handoffs to track progress
|
|
||||||
|
|
||||||
4. Technical Documentation
|
|
||||||
- Update component documentation
|
|
||||||
- Document system architecture
|
|
||||||
- Create developer guides
|
|
||||||
- Add setup instructions
|
|
||||||
- Ensure consistent handoff quality
|
|
||||||
|
|
||||||
### Future Enhancements
|
### Future Enhancements
|
||||||
1. Companies Module
|
1. Companies Module
|
||||||
|
|||||||
223
package-lock.json
generated
223
package-lock.json
generated
@@ -4,6 +4,7 @@
|
|||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
|
"name": "thrillwiki_laravel",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/aspect-ratio": "^0.4.2",
|
"@tailwindcss/aspect-ratio": "^0.4.2",
|
||||||
"@tailwindcss/forms": "^0.5.10",
|
"@tailwindcss/forms": "^0.5.10",
|
||||||
@@ -33,9 +34,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/aix-ppc64": {
|
"node_modules/@esbuild/aix-ppc64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
|
||||||
"integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
|
"integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -50,9 +51,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm": {
|
"node_modules/@esbuild/android-arm": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
|
||||||
"integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
|
"integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -67,9 +68,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm64": {
|
"node_modules/@esbuild/android-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
|
"integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -84,9 +85,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-x64": {
|
"node_modules/@esbuild/android-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
|
"integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -101,9 +102,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-arm64": {
|
"node_modules/@esbuild/darwin-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
|
"integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -118,9 +119,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-x64": {
|
"node_modules/@esbuild/darwin-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
|
"integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -135,9 +136,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-arm64": {
|
"node_modules/@esbuild/freebsd-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
|
"integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -152,9 +153,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-x64": {
|
"node_modules/@esbuild/freebsd-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
|
"integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -169,9 +170,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm": {
|
"node_modules/@esbuild/linux-arm": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
|
||||||
"integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
|
"integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -186,9 +187,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm64": {
|
"node_modules/@esbuild/linux-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
|
"integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -203,9 +204,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ia32": {
|
"node_modules/@esbuild/linux-ia32": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
|
||||||
"integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
|
"integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -220,9 +221,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-loong64": {
|
"node_modules/@esbuild/linux-loong64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
|
||||||
"integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
|
"integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
@@ -237,9 +238,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-mips64el": {
|
"node_modules/@esbuild/linux-mips64el": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
|
||||||
"integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
|
"integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"mips64el"
|
"mips64el"
|
||||||
],
|
],
|
||||||
@@ -254,9 +255,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ppc64": {
|
"node_modules/@esbuild/linux-ppc64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
|
||||||
"integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
|
"integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -271,9 +272,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-riscv64": {
|
"node_modules/@esbuild/linux-riscv64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
|
||||||
"integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
|
"integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@@ -288,9 +289,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-s390x": {
|
"node_modules/@esbuild/linux-s390x": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
|
||||||
"integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
|
"integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -305,9 +306,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-x64": {
|
"node_modules/@esbuild/linux-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
|
"integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -322,9 +323,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/netbsd-arm64": {
|
"node_modules/@esbuild/netbsd-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
|
"integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -339,9 +340,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/netbsd-x64": {
|
"node_modules/@esbuild/netbsd-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
|
"integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -356,9 +357,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openbsd-arm64": {
|
"node_modules/@esbuild/openbsd-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
|
"integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -373,9 +374,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openbsd-x64": {
|
"node_modules/@esbuild/openbsd-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
|
"integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -390,9 +391,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/sunos-x64": {
|
"node_modules/@esbuild/sunos-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
|
"integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -407,9 +408,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-arm64": {
|
"node_modules/@esbuild/win32-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
|
||||||
"integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
|
"integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -424,9 +425,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-ia32": {
|
"node_modules/@esbuild/win32-ia32": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
|
||||||
"integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
|
"integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -441,9 +442,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-x64": {
|
"node_modules/@esbuild/win32-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
|
||||||
"integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
|
"integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1011,9 +1012,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "1.7.9",
|
"version": "1.8.4",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
|
||||||
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
|
"integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1480,9 +1481,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esbuild": {
|
"node_modules/esbuild": {
|
||||||
"version": "0.24.2",
|
"version": "0.25.1",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
|
||||||
"integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
|
"integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -1493,31 +1494,31 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@esbuild/aix-ppc64": "0.24.2",
|
"@esbuild/aix-ppc64": "0.25.1",
|
||||||
"@esbuild/android-arm": "0.24.2",
|
"@esbuild/android-arm": "0.25.1",
|
||||||
"@esbuild/android-arm64": "0.24.2",
|
"@esbuild/android-arm64": "0.25.1",
|
||||||
"@esbuild/android-x64": "0.24.2",
|
"@esbuild/android-x64": "0.25.1",
|
||||||
"@esbuild/darwin-arm64": "0.24.2",
|
"@esbuild/darwin-arm64": "0.25.1",
|
||||||
"@esbuild/darwin-x64": "0.24.2",
|
"@esbuild/darwin-x64": "0.25.1",
|
||||||
"@esbuild/freebsd-arm64": "0.24.2",
|
"@esbuild/freebsd-arm64": "0.25.1",
|
||||||
"@esbuild/freebsd-x64": "0.24.2",
|
"@esbuild/freebsd-x64": "0.25.1",
|
||||||
"@esbuild/linux-arm": "0.24.2",
|
"@esbuild/linux-arm": "0.25.1",
|
||||||
"@esbuild/linux-arm64": "0.24.2",
|
"@esbuild/linux-arm64": "0.25.1",
|
||||||
"@esbuild/linux-ia32": "0.24.2",
|
"@esbuild/linux-ia32": "0.25.1",
|
||||||
"@esbuild/linux-loong64": "0.24.2",
|
"@esbuild/linux-loong64": "0.25.1",
|
||||||
"@esbuild/linux-mips64el": "0.24.2",
|
"@esbuild/linux-mips64el": "0.25.1",
|
||||||
"@esbuild/linux-ppc64": "0.24.2",
|
"@esbuild/linux-ppc64": "0.25.1",
|
||||||
"@esbuild/linux-riscv64": "0.24.2",
|
"@esbuild/linux-riscv64": "0.25.1",
|
||||||
"@esbuild/linux-s390x": "0.24.2",
|
"@esbuild/linux-s390x": "0.25.1",
|
||||||
"@esbuild/linux-x64": "0.24.2",
|
"@esbuild/linux-x64": "0.25.1",
|
||||||
"@esbuild/netbsd-arm64": "0.24.2",
|
"@esbuild/netbsd-arm64": "0.25.1",
|
||||||
"@esbuild/netbsd-x64": "0.24.2",
|
"@esbuild/netbsd-x64": "0.25.1",
|
||||||
"@esbuild/openbsd-arm64": "0.24.2",
|
"@esbuild/openbsd-arm64": "0.25.1",
|
||||||
"@esbuild/openbsd-x64": "0.24.2",
|
"@esbuild/openbsd-x64": "0.25.1",
|
||||||
"@esbuild/sunos-x64": "0.24.2",
|
"@esbuild/sunos-x64": "0.25.1",
|
||||||
"@esbuild/win32-arm64": "0.24.2",
|
"@esbuild/win32-arm64": "0.25.1",
|
||||||
"@esbuild/win32-ia32": "0.24.2",
|
"@esbuild/win32-ia32": "0.25.1",
|
||||||
"@esbuild/win32-x64": "0.24.2"
|
"@esbuild/win32-x64": "0.25.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/escalade": {
|
"node_modules/escalade": {
|
||||||
@@ -2848,14 +2849,14 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.1.1",
|
"version": "6.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz",
|
||||||
"integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==",
|
"integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.24.2",
|
"esbuild": "^0.25.0",
|
||||||
"postcss": "^8.5.2",
|
"postcss": "^8.5.3",
|
||||||
"rollup": "^4.30.1"
|
"rollup": "^4.30.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|||||||
Reference in New Issue
Block a user