mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-app.git
synced 2026-01-24 12:03:17 +00:00
🛠️ Refactor Docker setup with new PHP 8.3 image, update supervisord configuration, and adjust Sail runtime paths. Add missing Spanish translations for UI settings.
This commit is contained in:
11
.ai/mcp/mcp.json
Normal file
11
.ai/mcp/mcp.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"laravel-boost": {
|
||||||
|
"command": "vendor/bin/sail",
|
||||||
|
"args": [
|
||||||
|
"artisan",
|
||||||
|
"boost:mcp"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,7 +67,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
|
|||||||
## Foundational Context
|
## Foundational Context
|
||||||
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
|
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
|
||||||
|
|
||||||
- php - 8.4.14
|
- php - 8.3.29
|
||||||
- laravel/framework (LARAVEL) - v12
|
- laravel/framework (LARAVEL) - v12
|
||||||
- laravel/horizon (HORIZON) - v5
|
- laravel/horizon (HORIZON) - v5
|
||||||
- laravel/nightwatch (NIGHTWATCH) - v1
|
- laravel/nightwatch (NIGHTWATCH) - v1
|
||||||
@@ -75,7 +75,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- laravel/sanctum (SANCTUM) - v4
|
- laravel/sanctum (SANCTUM) - v4
|
||||||
- livewire/flux (FLUXUI_FREE) - v2
|
- livewire/flux (FLUXUI_FREE) - v2
|
||||||
- livewire/flux-pro (FLUXUI_PRO) - v2
|
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||||
- livewire/livewire (LIVEWIRE) - v3
|
- livewire/livewire (LIVEWIRE) - v4
|
||||||
- livewire/volt (VOLT) - v1
|
- livewire/volt (VOLT) - v1
|
||||||
- laravel/mcp (MCP) - v0
|
- laravel/mcp (MCP) - v0
|
||||||
- laravel/pint (PINT) - v1
|
- laravel/pint (PINT) - v1
|
||||||
@@ -85,7 +85,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- tailwindcss (TAILWINDCSS) - v4
|
- tailwindcss (TAILWINDCSS) - v4
|
||||||
|
|
||||||
## Conventions
|
## Conventions
|
||||||
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, naming.
|
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.
|
||||||
- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.
|
- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.
|
||||||
- Check for existing components to reuse before writing a new one.
|
- Check for existing components to reuse before writing a new one.
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- Do not create verification scripts or tinker when tests cover that functionality and prove it works. Unit and feature tests are more important.
|
- Do not create verification scripts or tinker when tests cover that functionality and prove it works. Unit and feature tests are more important.
|
||||||
|
|
||||||
## Application Structure & Architecture
|
## Application Structure & Architecture
|
||||||
- Stick to existing directory structure - don't create new base folders without approval.
|
- Stick to existing directory structure; don't create new base folders without approval.
|
||||||
- Do not change the application's dependencies without approval.
|
- Do not change the application's dependencies without approval.
|
||||||
|
|
||||||
## Frontend Bundling
|
## Frontend Bundling
|
||||||
@@ -105,17 +105,16 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
## Documentation Files
|
## Documentation Files
|
||||||
- You must only create documentation files if explicitly requested by the user.
|
- You must only create documentation files if explicitly requested by the user.
|
||||||
|
|
||||||
|
|
||||||
=== boost rules ===
|
=== boost rules ===
|
||||||
|
|
||||||
## Laravel Boost
|
## Laravel Boost
|
||||||
- Laravel Boost is an MCP server that comes with powerful tools designed specifically for this application. Use them.
|
- Laravel Boost is an MCP server that comes with powerful tools designed specifically for this application. Use them.
|
||||||
|
|
||||||
## Artisan
|
## Artisan
|
||||||
- Use the `list-artisan-commands` tool when you need to call an Artisan command to double check the available parameters.
|
- Use the `list-artisan-commands` tool when you need to call an Artisan command to double-check the available parameters.
|
||||||
|
|
||||||
## URLs
|
## URLs
|
||||||
- Whenever you share a project URL with the user you should use the `get-absolute-url` tool to ensure you're using the correct scheme, domain / IP, and port.
|
- Whenever you share a project URL with the user, you should use the `get-absolute-url` tool to ensure you're using the correct scheme, domain/IP, and port.
|
||||||
|
|
||||||
## Tinker / Debugging
|
## Tinker / Debugging
|
||||||
- You should use the `tinker` tool when you need to execute PHP to debug code or query Eloquent models directly.
|
- You should use the `tinker` tool when you need to execute PHP to debug code or query Eloquent models directly.
|
||||||
@@ -126,22 +125,21 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- Only recent browser logs will be useful - ignore old logs.
|
- Only recent browser logs will be useful - ignore old logs.
|
||||||
|
|
||||||
## Searching Documentation (Critically Important)
|
## Searching Documentation (Critically Important)
|
||||||
- Boost comes with a powerful `search-docs` tool you should use before any other approaches. This tool automatically passes a list of installed packages and their versions to the remote Boost API, so it returns only version-specific documentation specific for the user's circumstance. You should pass an array of packages to filter on if you know you need docs for particular packages.
|
- Boost comes with a powerful `search-docs` tool you should use before any other approaches when dealing with Laravel or Laravel ecosystem packages. This tool automatically passes a list of installed packages and their versions to the remote Boost API, so it returns only version-specific documentation for the user's circumstance. You should pass an array of packages to filter on if you know you need docs for particular packages.
|
||||||
- The 'search-docs' tool is perfect for all Laravel related packages, including Laravel, Inertia, Livewire, Filament, Tailwind, Pest, Nova, Nightwatch, etc.
|
- The `search-docs` tool is perfect for all Laravel-related packages, including Laravel, Inertia, Livewire, Filament, Tailwind, Pest, Nova, Nightwatch, etc.
|
||||||
- You must use this tool to search for Laravel-ecosystem documentation before falling back to other approaches.
|
- You must use this tool to search for Laravel ecosystem documentation before falling back to other approaches.
|
||||||
- Search the documentation before making code changes to ensure we are taking the correct approach.
|
- Search the documentation before making code changes to ensure we are taking the correct approach.
|
||||||
- Use multiple, broad, simple, topic based queries to start. For example: `['rate limiting', 'routing rate limiting', 'routing']`.
|
- Use multiple, broad, simple, topic-based queries to start. For example: `['rate limiting', 'routing rate limiting', 'routing']`.
|
||||||
- Do not add package names to queries - package information is already shared. For example, use `test resource table`, not `filament 4 test resource table`.
|
- Do not add package names to queries; package information is already shared. For example, use `test resource table`, not `filament 4 test resource table`.
|
||||||
|
|
||||||
### Available Search Syntax
|
### Available Search Syntax
|
||||||
- You can and should pass multiple queries at once. The most relevant results will be returned first.
|
- You can and should pass multiple queries at once. The most relevant results will be returned first.
|
||||||
|
|
||||||
1. Simple Word Searches with auto-stemming - query=authentication - finds 'authenticate' and 'auth'
|
1. Simple Word Searches with auto-stemming - query=authentication - finds 'authenticate' and 'auth'.
|
||||||
2. Multiple Words (AND Logic) - query=rate limit - finds knowledge containing both "rate" AND "limit"
|
2. Multiple Words (AND Logic) - query=rate limit - finds knowledge containing both "rate" AND "limit".
|
||||||
3. Quoted Phrases (Exact Position) - query="infinite scroll" - Words must be adjacent and in that order
|
3. Quoted Phrases (Exact Position) - query="infinite scroll" - words must be adjacent and in that order.
|
||||||
4. Mixed Queries - query=middleware "rate limit" - "middleware" AND exact phrase "rate limit"
|
4. Mixed Queries - query=middleware "rate limit" - "middleware" AND exact phrase "rate limit".
|
||||||
5. Multiple Queries - queries=["authentication", "middleware"] - ANY of these terms
|
5. Multiple Queries - queries=["authentication", "middleware"] - ANY of these terms.
|
||||||
|
|
||||||
|
|
||||||
=== php rules ===
|
=== php rules ===
|
||||||
|
|
||||||
@@ -152,7 +150,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
### Constructors
|
### Constructors
|
||||||
- Use PHP 8 constructor property promotion in `__construct()`.
|
- Use PHP 8 constructor property promotion in `__construct()`.
|
||||||
- <code-snippet>public function __construct(public GitHub $github) { }</code-snippet>
|
- <code-snippet>public function __construct(public GitHub $github) { }</code-snippet>
|
||||||
- Do not allow empty `__construct()` methods with zero parameters.
|
- Do not allow empty `__construct()` methods with zero parameters unless the constructor is private.
|
||||||
|
|
||||||
### Type Declarations
|
### Type Declarations
|
||||||
- Always use explicit return type declarations for methods and functions.
|
- Always use explicit return type declarations for methods and functions.
|
||||||
@@ -166,7 +164,7 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
## Comments
|
## Comments
|
||||||
- Prefer PHPDoc blocks over comments. Never use comments within the code itself unless there is something _very_ complex going on.
|
- Prefer PHPDoc blocks over inline comments. Never use comments within the code itself unless there is something very complex going on.
|
||||||
|
|
||||||
## PHPDoc Blocks
|
## PHPDoc Blocks
|
||||||
- Add useful array shape type definitions for arrays when appropriate.
|
- Add useful array shape type definitions for arrays when appropriate.
|
||||||
@@ -174,7 +172,6 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
## Enums
|
## Enums
|
||||||
- Typically, keys in an Enum should be TitleCase. For example: `FavoritePerson`, `BestLake`, `Monthly`.
|
- Typically, keys in an Enum should be TitleCase. For example: `FavoritePerson`, `BestLake`, `Monthly`.
|
||||||
|
|
||||||
|
|
||||||
=== sail rules ===
|
=== sail rules ===
|
||||||
|
|
||||||
## Laravel Sail
|
## Laravel Sail
|
||||||
@@ -182,21 +179,19 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
- This project runs inside Laravel Sail's Docker containers. You MUST execute all commands through Sail.
|
- This project runs inside Laravel Sail's Docker containers. You MUST execute all commands through Sail.
|
||||||
- Start services using `vendor/bin/sail up -d` and stop them with `vendor/bin/sail stop`.
|
- Start services using `vendor/bin/sail up -d` and stop them with `vendor/bin/sail stop`.
|
||||||
- Open the application in the browser by running `vendor/bin/sail open`.
|
- Open the application in the browser by running `vendor/bin/sail open`.
|
||||||
- Always prefix PHP, Artisan, Composer, and Node commands** with `vendor/bin/sail`. Examples:
|
- Always prefix PHP, Artisan, Composer, and Node commands with `vendor/bin/sail`. Examples:
|
||||||
- Run Artisan Commands: `vendor/bin/sail artisan migrate`
|
- Run Artisan Commands: `vendor/bin/sail artisan migrate`
|
||||||
- Install Composer packages: `vendor/bin/sail composer install`
|
- Install Composer packages: `vendor/bin/sail composer install`
|
||||||
- Execute node commands: `vendor/bin/sail yarn run dev`
|
- Execute Node commands: `vendor/bin/sail yarn run dev`
|
||||||
- Execute PHP scripts: `vendor/bin/sail php [script]`
|
- Execute PHP scripts: `vendor/bin/sail php [script]`
|
||||||
- View all available Sail commands by running `vendor/bin/sail` without arguments.
|
- View all available Sail commands by running `vendor/bin/sail` without arguments.
|
||||||
|
|
||||||
|
|
||||||
=== tests rules ===
|
=== tests rules ===
|
||||||
|
|
||||||
## Test Enforcement
|
## Test Enforcement
|
||||||
|
|
||||||
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
|
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
|
||||||
- Run the minimum number of tests needed to ensure code quality and speed. Use `vendor/bin/sail artisan test` with a specific filename or filter.
|
- Run the minimum number of tests needed to ensure code quality and speed. Use `vendor/bin/sail artisan test --compact` with a specific filename or filter.
|
||||||
|
|
||||||
|
|
||||||
=== laravel/core rules ===
|
=== laravel/core rules ===
|
||||||
|
|
||||||
@@ -208,7 +203,7 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
|
|
||||||
### Database
|
### Database
|
||||||
- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.
|
- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.
|
||||||
- Use Eloquent models and relationships before suggesting raw database queries
|
- Use Eloquent models and relationships before suggesting raw database queries.
|
||||||
- Avoid `DB::`; prefer `Model::query()`. Generate code that leverages Laravel's ORM capabilities rather than bypassing them.
|
- Avoid `DB::`; prefer `Model::query()`. Generate code that leverages Laravel's ORM capabilities rather than bypassing them.
|
||||||
- Generate code that prevents N+1 query problems by using eager loading.
|
- Generate code that prevents N+1 query problems by using eager loading.
|
||||||
- Use Laravel's query builder for very complex database operations.
|
- Use Laravel's query builder for very complex database operations.
|
||||||
@@ -243,45 +238,43 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
### Vite Error
|
### Vite Error
|
||||||
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `vendor/bin/sail yarn run build` or ask the user to run `vendor/bin/sail yarn run dev` or `vendor/bin/sail composer run dev`.
|
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `vendor/bin/sail yarn run build` or ask the user to run `vendor/bin/sail yarn run dev` or `vendor/bin/sail composer run dev`.
|
||||||
|
|
||||||
|
|
||||||
=== laravel/v12 rules ===
|
=== laravel/v12 rules ===
|
||||||
|
|
||||||
## Laravel 12
|
## Laravel 12
|
||||||
|
|
||||||
- Use the `search-docs` tool to get version specific documentation.
|
- Use the `search-docs` tool to get version-specific documentation.
|
||||||
- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.
|
- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.
|
||||||
|
|
||||||
### Laravel 12 Structure
|
### Laravel 12 Structure
|
||||||
- No middleware files in `app/Http/Middleware/`.
|
- In Laravel 12, middleware are no longer registered in `app/Http/Kernel.php`.
|
||||||
|
- Middleware are configured declaratively in `bootstrap/app.php` using `Application::configure()->withMiddleware()`.
|
||||||
- `bootstrap/app.php` is the file to register middleware, exceptions, and routing files.
|
- `bootstrap/app.php` is the file to register middleware, exceptions, and routing files.
|
||||||
- `bootstrap/providers.php` contains application specific service providers.
|
- `bootstrap/providers.php` contains application specific service providers.
|
||||||
- **No app\Console\Kernel.php** - use `bootstrap/app.php` or `routes/console.php` for console configuration.
|
- The `app\Console\Kernel.php` file no longer exists; use `bootstrap/app.php` or `routes/console.php` for console configuration.
|
||||||
- **Commands auto-register** - files in `app/Console/Commands/` are automatically available and do not require manual registration.
|
- Console commands in `app/Console/Commands/` are automatically available and do not require manual registration.
|
||||||
|
|
||||||
### Database
|
### Database
|
||||||
- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.
|
- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.
|
||||||
- Laravel 11 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.
|
- Laravel 12 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.
|
||||||
|
|
||||||
### Models
|
### Models
|
||||||
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||||
|
|
||||||
|
|
||||||
=== fluxui-pro/core rules ===
|
=== fluxui-pro/core rules ===
|
||||||
|
|
||||||
## Flux UI Pro
|
## Flux UI Pro
|
||||||
|
|
||||||
- This project is using the Pro version of Flux UI. It has full access to the free components and variants, as well as full access to the Pro components and variants.
|
- This project is using the Pro version of Flux UI. It has full access to the free components and variants, as well as full access to the Pro components and variants.
|
||||||
- Flux UI is a component library for Livewire. Flux is a robust, hand-crafted, UI component library for your Livewire applications. It's built using Tailwind CSS and provides a set of components that are easy to use and customize.
|
- Flux UI is a component library for Livewire. Flux is a robust, hand-crafted UI component library for your Livewire applications. It's built using Tailwind CSS and provides a set of components that are easy to use and customize.
|
||||||
- You should use Flux UI components when available.
|
- You should use Flux UI components when available.
|
||||||
- Fallback to standard Blade components if Flux is unavailable.
|
- Fallback to standard Blade components if Flux is unavailable.
|
||||||
- If available, use Laravel Boost's `search-docs` tool to get the exact documentation and code snippets available for this project.
|
- If available, use the `search-docs` tool to get the exact documentation and code snippets available for this project.
|
||||||
- Flux UI components look like this:
|
- Flux UI components look like this:
|
||||||
|
|
||||||
<code-snippet name="Flux UI component usage example" lang="blade">
|
<code-snippet name="Flux UI Component Example" lang="blade">
|
||||||
<flux:button variant="primary"/>
|
<flux:button variant="primary"/>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Available Components
|
### Available Components
|
||||||
This is correct as of Boost installation, but there may be additional components within the codebase.
|
This is correct as of Boost installation, but there may be additional components within the codebase.
|
||||||
|
|
||||||
@@ -289,14 +282,14 @@ This is correct as of Boost installation, but there may be additional components
|
|||||||
accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, callout, card, chart, checkbox, command, composer, context, date-picker, dropdown, editor, field, file-upload, heading, icon, input, kanban, modal, navbar, otp-input, pagination, pillbox, popover, profile, radio, select, separator, skeleton, slider, switch, table, tabs, text, textarea, time-picker, toast, tooltip
|
accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, callout, card, chart, checkbox, command, composer, context, date-picker, dropdown, editor, field, file-upload, heading, icon, input, kanban, modal, navbar, otp-input, pagination, pillbox, popover, profile, radio, select, separator, skeleton, slider, switch, table, tabs, text, textarea, time-picker, toast, tooltip
|
||||||
</available-flux-components>
|
</available-flux-components>
|
||||||
|
|
||||||
|
|
||||||
=== livewire/core rules ===
|
=== livewire/core rules ===
|
||||||
|
|
||||||
## Livewire Core
|
## Livewire
|
||||||
- Use the `search-docs` tool to find exact version specific documentation for how to write Livewire & Livewire tests.
|
|
||||||
- Use the `vendor/bin/sail artisan make:livewire [Posts\CreatePost]` artisan command to create new components
|
- Use the `search-docs` tool to find exact version-specific documentation for how to write Livewire and Livewire tests.
|
||||||
|
- Use the `vendor/bin/sail artisan make:livewire [Posts\CreatePost]` Artisan command to create new components.
|
||||||
- State should live on the server, with the UI reflecting it.
|
- State should live on the server, with the UI reflecting it.
|
||||||
- All Livewire requests hit the Laravel backend, they're like regular HTTP requests. Always validate form data, and run authorization checks in Livewire actions.
|
- All Livewire requests hit the Laravel backend; they're like regular HTTP requests. Always validate form data and run authorization checks in Livewire actions.
|
||||||
|
|
||||||
## Livewire Best Practices
|
## Livewire Best Practices
|
||||||
- Livewire components require a single root element.
|
- Livewire components require a single root element.
|
||||||
@@ -313,15 +306,14 @@ accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, ca
|
|||||||
|
|
||||||
- Prefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects:
|
- Prefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects:
|
||||||
|
|
||||||
<code-snippet name="Lifecycle hook examples" lang="php">
|
<code-snippet name="Lifecycle Hook Examples" lang="php">
|
||||||
public function mount(User $user) { $this->user = $user; }
|
public function mount(User $user) { $this->user = $user; }
|
||||||
public function updatedSearch() { $this->resetPage(); }
|
public function updatedSearch() { $this->resetPage(); }
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
## Testing Livewire
|
## Testing Livewire
|
||||||
|
|
||||||
<code-snippet name="Example Livewire component test" lang="php">
|
<code-snippet name="Example Livewire Component Test" lang="php">
|
||||||
Livewire::test(Counter::class)
|
Livewire::test(Counter::class)
|
||||||
->assertSet('count', 0)
|
->assertSet('count', 0)
|
||||||
->call('increment')
|
->call('increment')
|
||||||
@@ -330,58 +322,20 @@ accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, ca
|
|||||||
->assertStatus(200);
|
->assertStatus(200);
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
<code-snippet name="Testing Livewire Component Exists on Page" lang="php">
|
||||||
<code-snippet name="Testing a Livewire component exists within a page" lang="php">
|
|
||||||
$this->get('/posts/create')
|
$this->get('/posts/create')
|
||||||
->assertSeeLivewire(CreatePost::class);
|
->assertSeeLivewire(CreatePost::class);
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
=== livewire/v3 rules ===
|
|
||||||
|
|
||||||
## Livewire 3
|
|
||||||
|
|
||||||
### Key Changes From Livewire 2
|
|
||||||
- These things changed in Livewire 2, but may not have been updated in this application. Verify this application's setup to ensure you conform with application conventions.
|
|
||||||
- Use `wire:model.live` for real-time updates, `wire:model` is now deferred by default.
|
|
||||||
- Components now use the `App\Livewire` namespace (not `App\Http\Livewire`).
|
|
||||||
- Use `$this->dispatch()` to dispatch events (not `emit` or `dispatchBrowserEvent`).
|
|
||||||
- Use the `components.layouts.app` view as the typical layout path (not `layouts.app`).
|
|
||||||
|
|
||||||
### New Directives
|
|
||||||
- `wire:show`, `wire:transition`, `wire:cloak`, `wire:offline`, `wire:target` are available for use. Use the documentation to find usage examples.
|
|
||||||
|
|
||||||
### Alpine
|
|
||||||
- Alpine is now included with Livewire, don't manually include Alpine.js.
|
|
||||||
- Plugins included with Alpine: persist, intersect, collapse, and focus.
|
|
||||||
|
|
||||||
### Lifecycle Hooks
|
|
||||||
- You can listen for `livewire:init` to hook into Livewire initialization, and `fail.status === 419` for the page expiring:
|
|
||||||
|
|
||||||
<code-snippet name="livewire:load example" lang="js">
|
|
||||||
document.addEventListener('livewire:init', function () {
|
|
||||||
Livewire.hook('request', ({ fail }) => {
|
|
||||||
if (fail && fail.status === 419) {
|
|
||||||
alert('Your session expired');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Livewire.hook('message.failed', (message, component) => {
|
|
||||||
console.error(message);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</code-snippet>
|
|
||||||
|
|
||||||
|
|
||||||
=== volt/core rules ===
|
=== volt/core rules ===
|
||||||
|
|
||||||
## Livewire Volt
|
## Livewire Volt
|
||||||
|
|
||||||
- This project uses Livewire Volt for interactivity within its pages. New pages requiring interactivity must also use Livewire Volt. There is documentation available for it.
|
- This project uses Livewire Volt for interactivity within its pages. New pages requiring interactivity must also use Livewire Volt.
|
||||||
- Make new Volt components using `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`
|
- Make new Volt components using `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`.
|
||||||
- Volt is a **class-based** and **functional** API for Livewire that supports single-file components, allowing a component's PHP logic and Blade templates to co-exist in the same file
|
- Volt is a class-based and functional API for Livewire that supports single-file components, allowing a component's PHP logic and Blade templates to coexist in the same file.
|
||||||
- Livewire Volt allows PHP logic and Blade templates in one file. Components use the `@volt` directive.
|
- Livewire Volt allows PHP logic and Blade templates in one file. Components use the `@volt` directive.
|
||||||
- You must check existing Volt components to determine if they're functional or class based. If you can't detect that, ask the user which they prefer before writing a Volt component.
|
- You must check existing Volt components to determine if they're functional or class-based. If you can't detect that, ask the user which they prefer before writing a Volt component.
|
||||||
|
|
||||||
### Volt Functional Component Example
|
### Volt Functional Component Example
|
||||||
|
|
||||||
@@ -407,11 +361,9 @@ $double = computed(fn () => $this->count * 2);
|
|||||||
@endvolt
|
@endvolt
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Volt Class Based Component Example
|
### Volt Class Based Component Example
|
||||||
To get started, define an anonymous class that extends Livewire\Volt\Component. Within the class, you may utilize all of the features of Livewire using traditional Livewire syntax:
|
To get started, define an anonymous class that extends Livewire\Volt\Component. Within the class, you may utilize all of the features of Livewire using traditional Livewire syntax:
|
||||||
|
|
||||||
|
|
||||||
<code-snippet name="Volt Class-based Volt Component Example" lang="php">
|
<code-snippet name="Volt Class-based Volt Component Example" lang="php">
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Volt\Component;
|
||||||
|
|
||||||
@@ -430,7 +382,6 @@ new class extends Component {
|
|||||||
</div>
|
</div>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Testing Volt & Volt Components
|
### Testing Volt & Volt Components
|
||||||
- Use the existing directory for tests if it already exists. Otherwise, fallback to `tests/Feature/Volt`.
|
- Use the existing directory for tests if it already exists. Otherwise, fallback to `tests/Feature/Volt`.
|
||||||
|
|
||||||
@@ -445,7 +396,6 @@ test('counter increments', function () {
|
|||||||
});
|
});
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
<code-snippet name="Volt Component Test Using Pest" lang="php">
|
<code-snippet name="Volt Component Test Using Pest" lang="php">
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
@@ -467,10 +417,8 @@ test('product form creates product', function () {
|
|||||||
});
|
});
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Common Patterns
|
### Common Patterns
|
||||||
|
|
||||||
|
|
||||||
<code-snippet name="CRUD With Volt" lang="php">
|
<code-snippet name="CRUD With Volt" lang="php">
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
@@ -505,7 +453,6 @@ $delete = fn(Product $product) => $product->delete();
|
|||||||
</flux:button>
|
</flux:button>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
=== pint/core rules ===
|
=== pint/core rules ===
|
||||||
|
|
||||||
## Laravel Pint Code Formatter
|
## Laravel Pint Code Formatter
|
||||||
@@ -513,7 +460,6 @@ $delete = fn(Product $product) => $product->delete();
|
|||||||
- You must run `vendor/bin/sail bin pint --dirty` before finalizing changes to ensure your code matches the project's expected style.
|
- You must run `vendor/bin/sail bin pint --dirty` before finalizing changes to ensure your code matches the project's expected style.
|
||||||
- Do not run `vendor/bin/sail bin pint --test`, simply run `vendor/bin/sail bin pint` to fix any formatting issues.
|
- Do not run `vendor/bin/sail bin pint --test`, simply run `vendor/bin/sail bin pint` to fix any formatting issues.
|
||||||
|
|
||||||
|
|
||||||
=== pest/core rules ===
|
=== pest/core rules ===
|
||||||
|
|
||||||
## Pest
|
## Pest
|
||||||
@@ -534,9 +480,9 @@ it('is true', function () {
|
|||||||
|
|
||||||
### Running Tests
|
### Running Tests
|
||||||
- Run the minimal number of tests using an appropriate filter before finalizing code edits.
|
- Run the minimal number of tests using an appropriate filter before finalizing code edits.
|
||||||
- To run all tests: `vendor/bin/sail artisan test`.
|
- To run all tests: `vendor/bin/sail artisan test --compact`.
|
||||||
- To run all tests in a file: `vendor/bin/sail artisan test tests/Feature/ExampleTest.php`.
|
- To run all tests in a file: `vendor/bin/sail artisan test --compact tests/Feature/ExampleTest.php`.
|
||||||
- To filter on a particular test name: `vendor/bin/sail artisan test --filter=testName` (recommended after making a change to a related file).
|
- To filter on a particular test name: `vendor/bin/sail artisan test --compact --filter=testName` (recommended after making a change to a related file).
|
||||||
- When the tests relating to your changes are passing, ask the user if they would like to run the entire test suite to ensure everything is still passing.
|
- When the tests relating to your changes are passing, ask the user if they would like to run the entire test suite to ensure everything is still passing.
|
||||||
|
|
||||||
### Pest Assertions
|
### Pest Assertions
|
||||||
@@ -555,7 +501,7 @@ it('returns all', function () {
|
|||||||
- You can also create partial mocks using the same import or self method.
|
- You can also create partial mocks using the same import or self method.
|
||||||
|
|
||||||
### Datasets
|
### Datasets
|
||||||
- Use datasets in Pest to simplify tests which have a lot of duplicated data. This is often the case when testing validation rules, so consider going with this solution when writing tests for validation rules.
|
- Use datasets in Pest to simplify tests that have a lot of duplicated data. This is often the case when testing validation rules, so consider this solution when writing tests for validation rules.
|
||||||
|
|
||||||
<code-snippet name="Pest Dataset Example" lang="php">
|
<code-snippet name="Pest Dataset Example" lang="php">
|
||||||
it('has emails', function (string $email) {
|
it('has emails', function (string $email) {
|
||||||
@@ -566,18 +512,17 @@ it('has emails', function (string $email) {
|
|||||||
]);
|
]);
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
=== tailwindcss/core rules ===
|
=== tailwindcss/core rules ===
|
||||||
|
|
||||||
## Tailwind Core
|
## Tailwind CSS
|
||||||
|
|
||||||
- Use Tailwind CSS classes to style HTML, check and use existing tailwind conventions within the project before writing your own.
|
- Use Tailwind CSS classes to style HTML; check and use existing Tailwind conventions within the project before writing your own.
|
||||||
- Offer to extract repeated patterns into components that match the project's conventions (i.e. Blade, JSX, Vue, etc..)
|
- Offer to extract repeated patterns into components that match the project's conventions (i.e. Blade, JSX, Vue, etc.).
|
||||||
- Think through class placement, order, priority, and defaults - remove redundant classes, add classes to parent or child carefully to limit repetition, group elements logically
|
- Think through class placement, order, priority, and defaults. Remove redundant classes, add classes to parent or child carefully to limit repetition, and group elements logically.
|
||||||
- You can use the `search-docs` tool to get exact examples from the official documentation when needed.
|
- You can use the `search-docs` tool to get exact examples from the official documentation when needed.
|
||||||
|
|
||||||
### Spacing
|
### Spacing
|
||||||
- When listing items, use gap utilities for spacing, don't use margins.
|
- When listing items, use gap utilities for spacing; don't use margins.
|
||||||
|
|
||||||
<code-snippet name="Valid Flex Gap Spacing Example" lang="html">
|
<code-snippet name="Valid Flex Gap Spacing Example" lang="html">
|
||||||
<div class="flex gap-8">
|
<div class="flex gap-8">
|
||||||
@@ -587,18 +532,17 @@ it('has emails', function (string $email) {
|
|||||||
</div>
|
</div>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Dark Mode
|
### Dark Mode
|
||||||
- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`.
|
- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`.
|
||||||
|
|
||||||
|
|
||||||
=== tailwindcss/v4 rules ===
|
=== tailwindcss/v4 rules ===
|
||||||
|
|
||||||
## Tailwind 4
|
## Tailwind CSS 4
|
||||||
|
|
||||||
- Always use Tailwind CSS v4 - do not use the deprecated utilities.
|
- Always use Tailwind CSS v4; do not use the deprecated utilities.
|
||||||
- `corePlugins` is not supported in Tailwind v4.
|
- `corePlugins` is not supported in Tailwind v4.
|
||||||
- In Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed.
|
- In Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed.
|
||||||
|
|
||||||
<code-snippet name="Extending Theme in CSS" lang="css">
|
<code-snippet name="Extending Theme in CSS" lang="css">
|
||||||
@theme {
|
@theme {
|
||||||
--color-brand: oklch(0.72 0.11 178);
|
--color-brand: oklch(0.72 0.11 178);
|
||||||
@@ -614,9 +558,8 @@ it('has emails', function (string $email) {
|
|||||||
+ @import "tailwindcss";
|
+ @import "tailwindcss";
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Replaced Utilities
|
### Replaced Utilities
|
||||||
- Tailwind v4 removed deprecated utilities. Do not use the deprecated option - use the replacement.
|
- Tailwind v4 removed deprecated utilities. Do not use the deprecated option; use the replacement.
|
||||||
- Opacity values are still numeric.
|
- Opacity values are still numeric.
|
||||||
|
|
||||||
| Deprecated | Replacement |
|
| Deprecated | Replacement |
|
||||||
|
|||||||
519
AGENTS.md
Normal file
519
AGENTS.md
Normal file
@@ -0,0 +1,519 @@
|
|||||||
|
<laravel-boost-guidelines>
|
||||||
|
=== foundation rules ===
|
||||||
|
|
||||||
|
# Laravel Boost Guidelines
|
||||||
|
|
||||||
|
The Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to enhance the user's satisfaction building Laravel applications.
|
||||||
|
|
||||||
|
## Foundational Context
|
||||||
|
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
|
||||||
|
|
||||||
|
- php - 8.3.29
|
||||||
|
- laravel/framework (LARAVEL) - v12
|
||||||
|
- laravel/horizon (HORIZON) - v5
|
||||||
|
- laravel/nightwatch (NIGHTWATCH) - v1
|
||||||
|
- laravel/prompts (PROMPTS) - v0
|
||||||
|
- laravel/sanctum (SANCTUM) - v4
|
||||||
|
- livewire/flux (FLUXUI_FREE) - v2
|
||||||
|
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||||
|
- livewire/livewire (LIVEWIRE) - v4
|
||||||
|
- livewire/volt (VOLT) - v1
|
||||||
|
- laravel/mcp (MCP) - v0
|
||||||
|
- laravel/pint (PINT) - v1
|
||||||
|
- laravel/sail (SAIL) - v1
|
||||||
|
- pestphp/pest (PEST) - v3
|
||||||
|
- phpunit/phpunit (PHPUNIT) - v11
|
||||||
|
- tailwindcss (TAILWINDCSS) - v4
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.
|
||||||
|
- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.
|
||||||
|
- Check for existing components to reuse before writing a new one.
|
||||||
|
|
||||||
|
## Verification Scripts
|
||||||
|
- Do not create verification scripts or tinker when tests cover that functionality and prove it works. Unit and feature tests are more important.
|
||||||
|
|
||||||
|
## Application Structure & Architecture
|
||||||
|
- Stick to existing directory structure; don't create new base folders without approval.
|
||||||
|
- Do not change the application's dependencies without approval.
|
||||||
|
|
||||||
|
## Frontend Bundling
|
||||||
|
- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run `vendor/bin/sail yarn run build`, `vendor/bin/sail yarn run dev`, or `vendor/bin/sail composer run dev`. Ask them.
|
||||||
|
|
||||||
|
## Replies
|
||||||
|
- Be concise in your explanations - focus on what's important rather than explaining obvious details.
|
||||||
|
|
||||||
|
## Documentation Files
|
||||||
|
- You must only create documentation files if explicitly requested by the user.
|
||||||
|
|
||||||
|
=== boost rules ===
|
||||||
|
|
||||||
|
## Laravel Boost
|
||||||
|
- Laravel Boost is an MCP server that comes with powerful tools designed specifically for this application. Use them.
|
||||||
|
|
||||||
|
## Artisan
|
||||||
|
- Use the `list-artisan-commands` tool when you need to call an Artisan command to double-check the available parameters.
|
||||||
|
|
||||||
|
## URLs
|
||||||
|
- Whenever you share a project URL with the user, you should use the `get-absolute-url` tool to ensure you're using the correct scheme, domain/IP, and port.
|
||||||
|
|
||||||
|
## Tinker / Debugging
|
||||||
|
- You should use the `tinker` tool when you need to execute PHP to debug code or query Eloquent models directly.
|
||||||
|
- Use the `database-query` tool when you only need to read from the database.
|
||||||
|
|
||||||
|
## Reading Browser Logs With the `browser-logs` Tool
|
||||||
|
- You can read browser logs, errors, and exceptions using the `browser-logs` tool from Boost.
|
||||||
|
- Only recent browser logs will be useful - ignore old logs.
|
||||||
|
|
||||||
|
## Searching Documentation (Critically Important)
|
||||||
|
- Boost comes with a powerful `search-docs` tool you should use before any other approaches when dealing with Laravel or Laravel ecosystem packages. This tool automatically passes a list of installed packages and their versions to the remote Boost API, so it returns only version-specific documentation for the user's circumstance. You should pass an array of packages to filter on if you know you need docs for particular packages.
|
||||||
|
- The `search-docs` tool is perfect for all Laravel-related packages, including Laravel, Inertia, Livewire, Filament, Tailwind, Pest, Nova, Nightwatch, etc.
|
||||||
|
- You must use this tool to search for Laravel ecosystem documentation before falling back to other approaches.
|
||||||
|
- Search the documentation before making code changes to ensure we are taking the correct approach.
|
||||||
|
- Use multiple, broad, simple, topic-based queries to start. For example: `['rate limiting', 'routing rate limiting', 'routing']`.
|
||||||
|
- Do not add package names to queries; package information is already shared. For example, use `test resource table`, not `filament 4 test resource table`.
|
||||||
|
|
||||||
|
### Available Search Syntax
|
||||||
|
- You can and should pass multiple queries at once. The most relevant results will be returned first.
|
||||||
|
|
||||||
|
1. Simple Word Searches with auto-stemming - query=authentication - finds 'authenticate' and 'auth'.
|
||||||
|
2. Multiple Words (AND Logic) - query=rate limit - finds knowledge containing both "rate" AND "limit".
|
||||||
|
3. Quoted Phrases (Exact Position) - query="infinite scroll" - words must be adjacent and in that order.
|
||||||
|
4. Mixed Queries - query=middleware "rate limit" - "middleware" AND exact phrase "rate limit".
|
||||||
|
5. Multiple Queries - queries=["authentication", "middleware"] - ANY of these terms.
|
||||||
|
|
||||||
|
=== php rules ===
|
||||||
|
|
||||||
|
## PHP
|
||||||
|
|
||||||
|
- Always use curly braces for control structures, even if it has one line.
|
||||||
|
|
||||||
|
### Constructors
|
||||||
|
- Use PHP 8 constructor property promotion in `__construct()`.
|
||||||
|
- <code-snippet>public function __construct(public GitHub $github) { }</code-snippet>
|
||||||
|
- Do not allow empty `__construct()` methods with zero parameters unless the constructor is private.
|
||||||
|
|
||||||
|
### Type Declarations
|
||||||
|
- Always use explicit return type declarations for methods and functions.
|
||||||
|
- Use appropriate PHP type hints for method parameters.
|
||||||
|
|
||||||
|
<code-snippet name="Explicit Return Types and Method Params" lang="php">
|
||||||
|
protected function isAccessible(User $user, ?string $path = null): bool
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
## Comments
|
||||||
|
- Prefer PHPDoc blocks over inline comments. Never use comments within the code itself unless there is something very complex going on.
|
||||||
|
|
||||||
|
## PHPDoc Blocks
|
||||||
|
- Add useful array shape type definitions for arrays when appropriate.
|
||||||
|
|
||||||
|
## Enums
|
||||||
|
- Typically, keys in an Enum should be TitleCase. For example: `FavoritePerson`, `BestLake`, `Monthly`.
|
||||||
|
|
||||||
|
=== sail rules ===
|
||||||
|
|
||||||
|
## Laravel Sail
|
||||||
|
|
||||||
|
- This project runs inside Laravel Sail's Docker containers. You MUST execute all commands through Sail.
|
||||||
|
- Start services using `vendor/bin/sail up -d` and stop them with `vendor/bin/sail stop`.
|
||||||
|
- Open the application in the browser by running `vendor/bin/sail open`.
|
||||||
|
- Always prefix PHP, Artisan, Composer, and Node commands with `vendor/bin/sail`. Examples:
|
||||||
|
- Run Artisan Commands: `vendor/bin/sail artisan migrate`
|
||||||
|
- Install Composer packages: `vendor/bin/sail composer install`
|
||||||
|
- Execute Node commands: `vendor/bin/sail yarn run dev`
|
||||||
|
- Execute PHP scripts: `vendor/bin/sail php [script]`
|
||||||
|
- View all available Sail commands by running `vendor/bin/sail` without arguments.
|
||||||
|
|
||||||
|
=== tests rules ===
|
||||||
|
|
||||||
|
## Test Enforcement
|
||||||
|
|
||||||
|
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
|
||||||
|
- Run the minimum number of tests needed to ensure code quality and speed. Use `vendor/bin/sail artisan test --compact` with a specific filename or filter.
|
||||||
|
|
||||||
|
=== laravel/core rules ===
|
||||||
|
|
||||||
|
## Do Things the Laravel Way
|
||||||
|
|
||||||
|
- Use `vendor/bin/sail artisan make:` commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using the `list-artisan-commands` tool.
|
||||||
|
- If you're creating a generic PHP class, use `vendor/bin/sail artisan make:class`.
|
||||||
|
- Pass `--no-interaction` to all Artisan commands to ensure they work without user input. You should also pass the correct `--options` to ensure correct behavior.
|
||||||
|
|
||||||
|
### Database
|
||||||
|
- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.
|
||||||
|
- Use Eloquent models and relationships before suggesting raw database queries.
|
||||||
|
- Avoid `DB::`; prefer `Model::query()`. Generate code that leverages Laravel's ORM capabilities rather than bypassing them.
|
||||||
|
- Generate code that prevents N+1 query problems by using eager loading.
|
||||||
|
- Use Laravel's query builder for very complex database operations.
|
||||||
|
|
||||||
|
### Model Creation
|
||||||
|
- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using `list-artisan-commands` to check the available options to `vendor/bin/sail artisan make:model`.
|
||||||
|
|
||||||
|
### APIs & Eloquent Resources
|
||||||
|
- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.
|
||||||
|
|
||||||
|
### Controllers & Validation
|
||||||
|
- Always create Form Request classes for validation rather than inline validation in controllers. Include both validation rules and custom error messages.
|
||||||
|
- Check sibling Form Requests to see if the application uses array or string based validation rules.
|
||||||
|
|
||||||
|
### Queues
|
||||||
|
- Use queued jobs for time-consuming operations with the `ShouldQueue` interface.
|
||||||
|
|
||||||
|
### Authentication & Authorization
|
||||||
|
- Use Laravel's built-in authentication and authorization features (gates, policies, Sanctum, etc.).
|
||||||
|
|
||||||
|
### URL Generation
|
||||||
|
- When generating links to other pages, prefer named routes and the `route()` function.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
- Use environment variables only in configuration files - never use the `env()` function directly outside of config files. Always use `config('app.name')`, not `env('APP_NAME')`.
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model.
|
||||||
|
- Faker: Use methods such as `$this->faker->word()` or `fake()->randomDigit()`. Follow existing conventions whether to use `$this->faker` or `fake()`.
|
||||||
|
- When creating tests, make use of `vendor/bin/sail artisan make:test [options] {name}` to create a feature test, and pass `--unit` to create a unit test. Most tests should be feature tests.
|
||||||
|
|
||||||
|
### Vite Error
|
||||||
|
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `vendor/bin/sail yarn run build` or ask the user to run `vendor/bin/sail yarn run dev` or `vendor/bin/sail composer run dev`.
|
||||||
|
|
||||||
|
=== laravel/v12 rules ===
|
||||||
|
|
||||||
|
## Laravel 12
|
||||||
|
|
||||||
|
- Use the `search-docs` tool to get version-specific documentation.
|
||||||
|
- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.
|
||||||
|
|
||||||
|
### Laravel 12 Structure
|
||||||
|
- In Laravel 12, middleware are no longer registered in `app/Http/Kernel.php`.
|
||||||
|
- Middleware are configured declaratively in `bootstrap/app.php` using `Application::configure()->withMiddleware()`.
|
||||||
|
- `bootstrap/app.php` is the file to register middleware, exceptions, and routing files.
|
||||||
|
- `bootstrap/providers.php` contains application specific service providers.
|
||||||
|
- The `app\Console\Kernel.php` file no longer exists; use `bootstrap/app.php` or `routes/console.php` for console configuration.
|
||||||
|
- Console commands in `app/Console/Commands/` are automatically available and do not require manual registration.
|
||||||
|
|
||||||
|
### Database
|
||||||
|
- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.
|
||||||
|
- Laravel 12 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.
|
||||||
|
|
||||||
|
### Models
|
||||||
|
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||||
|
|
||||||
|
=== fluxui-pro/core rules ===
|
||||||
|
|
||||||
|
## Flux UI Pro
|
||||||
|
|
||||||
|
- This project is using the Pro version of Flux UI. It has full access to the free components and variants, as well as full access to the Pro components and variants.
|
||||||
|
- Flux UI is a component library for Livewire. Flux is a robust, hand-crafted UI component library for your Livewire applications. It's built using Tailwind CSS and provides a set of components that are easy to use and customize.
|
||||||
|
- You should use Flux UI components when available.
|
||||||
|
- Fallback to standard Blade components if Flux is unavailable.
|
||||||
|
- If available, use the `search-docs` tool to get the exact documentation and code snippets available for this project.
|
||||||
|
- Flux UI components look like this:
|
||||||
|
|
||||||
|
<code-snippet name="Flux UI Component Example" lang="blade">
|
||||||
|
<flux:button variant="primary"/>
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Available Components
|
||||||
|
This is correct as of Boost installation, but there may be additional components within the codebase.
|
||||||
|
|
||||||
|
<available-flux-components>
|
||||||
|
accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, callout, card, chart, checkbox, command, composer, context, date-picker, dropdown, editor, field, file-upload, heading, icon, input, kanban, modal, navbar, otp-input, pagination, pillbox, popover, profile, radio, select, separator, skeleton, slider, switch, table, tabs, text, textarea, time-picker, toast, tooltip
|
||||||
|
</available-flux-components>
|
||||||
|
|
||||||
|
=== livewire/core rules ===
|
||||||
|
|
||||||
|
## Livewire
|
||||||
|
|
||||||
|
- Use the `search-docs` tool to find exact version-specific documentation for how to write Livewire and Livewire tests.
|
||||||
|
- Use the `vendor/bin/sail artisan make:livewire [Posts\CreatePost]` Artisan command to create new components.
|
||||||
|
- State should live on the server, with the UI reflecting it.
|
||||||
|
- All Livewire requests hit the Laravel backend; they're like regular HTTP requests. Always validate form data and run authorization checks in Livewire actions.
|
||||||
|
|
||||||
|
## Livewire Best Practices
|
||||||
|
- Livewire components require a single root element.
|
||||||
|
- Use `wire:loading` and `wire:dirty` for delightful loading states.
|
||||||
|
- Add `wire:key` in loops:
|
||||||
|
|
||||||
|
```blade
|
||||||
|
@foreach ($items as $item)
|
||||||
|
<div wire:key="item-{{ $item->id }}">
|
||||||
|
{{ $item->name }}
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
```
|
||||||
|
|
||||||
|
- Prefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects:
|
||||||
|
|
||||||
|
<code-snippet name="Lifecycle Hook Examples" lang="php">
|
||||||
|
public function mount(User $user) { $this->user = $user; }
|
||||||
|
public function updatedSearch() { $this->resetPage(); }
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
## Testing Livewire
|
||||||
|
|
||||||
|
<code-snippet name="Example Livewire Component Test" lang="php">
|
||||||
|
Livewire::test(Counter::class)
|
||||||
|
->assertSet('count', 0)
|
||||||
|
->call('increment')
|
||||||
|
->assertSet('count', 1)
|
||||||
|
->assertSee(1)
|
||||||
|
->assertStatus(200);
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
<code-snippet name="Testing Livewire Component Exists on Page" lang="php">
|
||||||
|
$this->get('/posts/create')
|
||||||
|
->assertSeeLivewire(CreatePost::class);
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
=== volt/core rules ===
|
||||||
|
|
||||||
|
## Livewire Volt
|
||||||
|
|
||||||
|
- This project uses Livewire Volt for interactivity within its pages. New pages requiring interactivity must also use Livewire Volt.
|
||||||
|
- Make new Volt components using `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`.
|
||||||
|
- Volt is a class-based and functional API for Livewire that supports single-file components, allowing a component's PHP logic and Blade templates to coexist in the same file.
|
||||||
|
- Livewire Volt allows PHP logic and Blade templates in one file. Components use the `@volt` directive.
|
||||||
|
- You must check existing Volt components to determine if they're functional or class-based. If you can't detect that, ask the user which they prefer before writing a Volt component.
|
||||||
|
|
||||||
|
### Volt Functional Component Example
|
||||||
|
|
||||||
|
<code-snippet name="Volt Functional Component Example" lang="php">
|
||||||
|
@volt
|
||||||
|
<?php
|
||||||
|
use function Livewire\Volt\{state, computed};
|
||||||
|
|
||||||
|
state(['count' => 0]);
|
||||||
|
|
||||||
|
$increment = fn () => $this->count++;
|
||||||
|
$decrement = fn () => $this->count--;
|
||||||
|
|
||||||
|
$double = computed(fn () => $this->count * 2);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h1>Count: {{ $count }}</h1>
|
||||||
|
<h2>Double: {{ $this->double }}</h2>
|
||||||
|
<button wire:click="increment">+</button>
|
||||||
|
<button wire:click="decrement">-</button>
|
||||||
|
</div>
|
||||||
|
@endvolt
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Volt Class Based Component Example
|
||||||
|
To get started, define an anonymous class that extends Livewire\Volt\Component. Within the class, you may utilize all of the features of Livewire using traditional Livewire syntax:
|
||||||
|
|
||||||
|
<code-snippet name="Volt Class-based Volt Component Example" lang="php">
|
||||||
|
use Livewire\Volt\Component;
|
||||||
|
|
||||||
|
new class extends Component {
|
||||||
|
public $count = 0;
|
||||||
|
|
||||||
|
public function increment()
|
||||||
|
{
|
||||||
|
$this->count++;
|
||||||
|
}
|
||||||
|
} ?>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h1>{{ $count }}</h1>
|
||||||
|
<button wire:click="increment">+</button>
|
||||||
|
</div>
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Testing Volt & Volt Components
|
||||||
|
- Use the existing directory for tests if it already exists. Otherwise, fallback to `tests/Feature/Volt`.
|
||||||
|
|
||||||
|
<code-snippet name="Livewire Test Example" lang="php">
|
||||||
|
use Livewire\Volt\Volt;
|
||||||
|
|
||||||
|
test('counter increments', function () {
|
||||||
|
Volt::test('counter')
|
||||||
|
->assertSee('Count: 0')
|
||||||
|
->call('increment')
|
||||||
|
->assertSee('Count: 1');
|
||||||
|
});
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
<code-snippet name="Volt Component Test Using Pest" lang="php">
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use App\Models\{User, Product};
|
||||||
|
use Livewire\Volt\Volt;
|
||||||
|
|
||||||
|
test('product form creates product', function () {
|
||||||
|
$user = User::factory()->create();
|
||||||
|
|
||||||
|
Volt::test('pages.products.create')
|
||||||
|
->actingAs($user)
|
||||||
|
->set('form.name', 'Test Product')
|
||||||
|
->set('form.description', 'Test Description')
|
||||||
|
->set('form.price', 99.99)
|
||||||
|
->call('create')
|
||||||
|
->assertHasNoErrors();
|
||||||
|
|
||||||
|
expect(Product::where('name', 'Test Product')->exists())->toBeTrue();
|
||||||
|
});
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Common Patterns
|
||||||
|
|
||||||
|
<code-snippet name="CRUD With Volt" lang="php">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Product;
|
||||||
|
use function Livewire\Volt\{state, computed};
|
||||||
|
|
||||||
|
state(['editing' => null, 'search' => '']);
|
||||||
|
|
||||||
|
$products = computed(fn() => Product::when($this->search,
|
||||||
|
fn($q) => $q->where('name', 'like', "%{$this->search}%")
|
||||||
|
)->get());
|
||||||
|
|
||||||
|
$edit = fn(Product $product) => $this->editing = $product->id;
|
||||||
|
$delete = fn(Product $product) => $product->delete();
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- HTML / UI Here -->
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
<code-snippet name="Real-Time Search With Volt" lang="php">
|
||||||
|
<flux:input
|
||||||
|
wire:model.live.debounce.300ms="search"
|
||||||
|
placeholder="Search..."
|
||||||
|
/>
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
<code-snippet name="Loading States With Volt" lang="php">
|
||||||
|
<flux:button wire:click="save" wire:loading.attr="disabled">
|
||||||
|
<span wire:loading.remove>Save</span>
|
||||||
|
<span wire:loading>Saving...</span>
|
||||||
|
</flux:button>
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
=== pint/core rules ===
|
||||||
|
|
||||||
|
## Laravel Pint Code Formatter
|
||||||
|
|
||||||
|
- You must run `vendor/bin/sail bin pint --dirty` before finalizing changes to ensure your code matches the project's expected style.
|
||||||
|
- Do not run `vendor/bin/sail bin pint --test`, simply run `vendor/bin/sail bin pint` to fix any formatting issues.
|
||||||
|
|
||||||
|
=== pest/core rules ===
|
||||||
|
|
||||||
|
## Pest
|
||||||
|
### Testing
|
||||||
|
- If you need to verify a feature is working, write or update a Unit / Feature test.
|
||||||
|
|
||||||
|
### Pest Tests
|
||||||
|
- All tests must be written using Pest. Use `vendor/bin/sail artisan make:test --pest {name}`.
|
||||||
|
- You must not remove any tests or test files from the tests directory without approval. These are not temporary or helper files - these are core to the application.
|
||||||
|
- Tests should test all of the happy paths, failure paths, and weird paths.
|
||||||
|
- Tests live in the `tests/Feature` and `tests/Unit` directories.
|
||||||
|
- Pest tests look and behave like this:
|
||||||
|
<code-snippet name="Basic Pest Test Example" lang="php">
|
||||||
|
it('is true', function () {
|
||||||
|
expect(true)->toBeTrue();
|
||||||
|
});
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
- Run the minimal number of tests using an appropriate filter before finalizing code edits.
|
||||||
|
- To run all tests: `vendor/bin/sail artisan test --compact`.
|
||||||
|
- To run all tests in a file: `vendor/bin/sail artisan test --compact tests/Feature/ExampleTest.php`.
|
||||||
|
- To filter on a particular test name: `vendor/bin/sail artisan test --compact --filter=testName` (recommended after making a change to a related file).
|
||||||
|
- When the tests relating to your changes are passing, ask the user if they would like to run the entire test suite to ensure everything is still passing.
|
||||||
|
|
||||||
|
### Pest Assertions
|
||||||
|
- When asserting status codes on a response, use the specific method like `assertForbidden` and `assertNotFound` instead of using `assertStatus(403)` or similar, e.g.:
|
||||||
|
<code-snippet name="Pest Example Asserting postJson Response" lang="php">
|
||||||
|
it('returns all', function () {
|
||||||
|
$response = $this->postJson('/api/docs', []);
|
||||||
|
|
||||||
|
$response->assertSuccessful();
|
||||||
|
});
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Mocking
|
||||||
|
- Mocking can be very helpful when appropriate.
|
||||||
|
- When mocking, you can use the `Pest\Laravel\mock` Pest function, but always import it via `use function Pest\Laravel\mock;` before using it. Alternatively, you can use `$this->mock()` if existing tests do.
|
||||||
|
- You can also create partial mocks using the same import or self method.
|
||||||
|
|
||||||
|
### Datasets
|
||||||
|
- Use datasets in Pest to simplify tests that have a lot of duplicated data. This is often the case when testing validation rules, so consider this solution when writing tests for validation rules.
|
||||||
|
|
||||||
|
<code-snippet name="Pest Dataset Example" lang="php">
|
||||||
|
it('has emails', function (string $email) {
|
||||||
|
expect($email)->not->toBeEmpty();
|
||||||
|
})->with([
|
||||||
|
'james' => 'james@laravel.com',
|
||||||
|
'taylor' => 'taylor@laravel.com',
|
||||||
|
]);
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
=== tailwindcss/core rules ===
|
||||||
|
|
||||||
|
## Tailwind CSS
|
||||||
|
|
||||||
|
- Use Tailwind CSS classes to style HTML; check and use existing Tailwind conventions within the project before writing your own.
|
||||||
|
- Offer to extract repeated patterns into components that match the project's conventions (i.e. Blade, JSX, Vue, etc.).
|
||||||
|
- Think through class placement, order, priority, and defaults. Remove redundant classes, add classes to parent or child carefully to limit repetition, and group elements logically.
|
||||||
|
- You can use the `search-docs` tool to get exact examples from the official documentation when needed.
|
||||||
|
|
||||||
|
### Spacing
|
||||||
|
- When listing items, use gap utilities for spacing; don't use margins.
|
||||||
|
|
||||||
|
<code-snippet name="Valid Flex Gap Spacing Example" lang="html">
|
||||||
|
<div class="flex gap-8">
|
||||||
|
<div>Superior</div>
|
||||||
|
<div>Michigan</div>
|
||||||
|
<div>Erie</div>
|
||||||
|
</div>
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Dark Mode
|
||||||
|
- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`.
|
||||||
|
|
||||||
|
=== tailwindcss/v4 rules ===
|
||||||
|
|
||||||
|
## Tailwind CSS 4
|
||||||
|
|
||||||
|
- Always use Tailwind CSS v4; do not use the deprecated utilities.
|
||||||
|
- `corePlugins` is not supported in Tailwind v4.
|
||||||
|
- In Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed.
|
||||||
|
|
||||||
|
<code-snippet name="Extending Theme in CSS" lang="css">
|
||||||
|
@theme {
|
||||||
|
--color-brand: oklch(0.72 0.11 178);
|
||||||
|
}
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
- In Tailwind v4, you import Tailwind using a regular CSS `@import` statement, not using the `@tailwind` directives used in v3:
|
||||||
|
|
||||||
|
<code-snippet name="Tailwind v4 Import Tailwind Diff" lang="diff">
|
||||||
|
- @tailwind base;
|
||||||
|
- @tailwind components;
|
||||||
|
- @tailwind utilities;
|
||||||
|
+ @import "tailwindcss";
|
||||||
|
</code-snippet>
|
||||||
|
|
||||||
|
### Replaced Utilities
|
||||||
|
- Tailwind v4 removed deprecated utilities. Do not use the deprecated option; use the replacement.
|
||||||
|
- Opacity values are still numeric.
|
||||||
|
|
||||||
|
| Deprecated | Replacement |
|
||||||
|
|------------+--------------|
|
||||||
|
| bg-opacity-* | bg-black/* |
|
||||||
|
| text-opacity-* | text-black/* |
|
||||||
|
| border-opacity-* | border-black/* |
|
||||||
|
| divide-opacity-* | divide-black/* |
|
||||||
|
| ring-opacity-* | ring-black/* |
|
||||||
|
| placeholder-opacity-* | placeholder-black/* |
|
||||||
|
| flex-shrink-* | shrink-* |
|
||||||
|
| flex-grow-* | grow-* |
|
||||||
|
| overflow-ellipsis | text-ellipsis |
|
||||||
|
| decoration-slice | box-decoration-slice |
|
||||||
|
| decoration-clone | box-decoration-clone |
|
||||||
|
</laravel-boost-guidelines>
|
||||||
169
CLAUDE.md
169
CLAUDE.md
@@ -8,7 +8,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
|
|||||||
## Foundational Context
|
## Foundational Context
|
||||||
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
|
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
|
||||||
|
|
||||||
- php - 8.4.14
|
- php - 8.3.29
|
||||||
- laravel/framework (LARAVEL) - v12
|
- laravel/framework (LARAVEL) - v12
|
||||||
- laravel/horizon (HORIZON) - v5
|
- laravel/horizon (HORIZON) - v5
|
||||||
- laravel/nightwatch (NIGHTWATCH) - v1
|
- laravel/nightwatch (NIGHTWATCH) - v1
|
||||||
@@ -16,7 +16,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- laravel/sanctum (SANCTUM) - v4
|
- laravel/sanctum (SANCTUM) - v4
|
||||||
- livewire/flux (FLUXUI_FREE) - v2
|
- livewire/flux (FLUXUI_FREE) - v2
|
||||||
- livewire/flux-pro (FLUXUI_PRO) - v2
|
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||||
- livewire/livewire (LIVEWIRE) - v3
|
- livewire/livewire (LIVEWIRE) - v4
|
||||||
- livewire/volt (VOLT) - v1
|
- livewire/volt (VOLT) - v1
|
||||||
- laravel/mcp (MCP) - v0
|
- laravel/mcp (MCP) - v0
|
||||||
- laravel/pint (PINT) - v1
|
- laravel/pint (PINT) - v1
|
||||||
@@ -26,7 +26,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- tailwindcss (TAILWINDCSS) - v4
|
- tailwindcss (TAILWINDCSS) - v4
|
||||||
|
|
||||||
## Conventions
|
## Conventions
|
||||||
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, naming.
|
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.
|
||||||
- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.
|
- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.
|
||||||
- Check for existing components to reuse before writing a new one.
|
- Check for existing components to reuse before writing a new one.
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- Do not create verification scripts or tinker when tests cover that functionality and prove it works. Unit and feature tests are more important.
|
- Do not create verification scripts or tinker when tests cover that functionality and prove it works. Unit and feature tests are more important.
|
||||||
|
|
||||||
## Application Structure & Architecture
|
## Application Structure & Architecture
|
||||||
- Stick to existing directory structure - don't create new base folders without approval.
|
- Stick to existing directory structure; don't create new base folders without approval.
|
||||||
- Do not change the application's dependencies without approval.
|
- Do not change the application's dependencies without approval.
|
||||||
|
|
||||||
## Frontend Bundling
|
## Frontend Bundling
|
||||||
@@ -46,17 +46,16 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
## Documentation Files
|
## Documentation Files
|
||||||
- You must only create documentation files if explicitly requested by the user.
|
- You must only create documentation files if explicitly requested by the user.
|
||||||
|
|
||||||
|
|
||||||
=== boost rules ===
|
=== boost rules ===
|
||||||
|
|
||||||
## Laravel Boost
|
## Laravel Boost
|
||||||
- Laravel Boost is an MCP server that comes with powerful tools designed specifically for this application. Use them.
|
- Laravel Boost is an MCP server that comes with powerful tools designed specifically for this application. Use them.
|
||||||
|
|
||||||
## Artisan
|
## Artisan
|
||||||
- Use the `list-artisan-commands` tool when you need to call an Artisan command to double check the available parameters.
|
- Use the `list-artisan-commands` tool when you need to call an Artisan command to double-check the available parameters.
|
||||||
|
|
||||||
## URLs
|
## URLs
|
||||||
- Whenever you share a project URL with the user you should use the `get-absolute-url` tool to ensure you're using the correct scheme, domain / IP, and port.
|
- Whenever you share a project URL with the user, you should use the `get-absolute-url` tool to ensure you're using the correct scheme, domain/IP, and port.
|
||||||
|
|
||||||
## Tinker / Debugging
|
## Tinker / Debugging
|
||||||
- You should use the `tinker` tool when you need to execute PHP to debug code or query Eloquent models directly.
|
- You should use the `tinker` tool when you need to execute PHP to debug code or query Eloquent models directly.
|
||||||
@@ -67,22 +66,21 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
- Only recent browser logs will be useful - ignore old logs.
|
- Only recent browser logs will be useful - ignore old logs.
|
||||||
|
|
||||||
## Searching Documentation (Critically Important)
|
## Searching Documentation (Critically Important)
|
||||||
- Boost comes with a powerful `search-docs` tool you should use before any other approaches. This tool automatically passes a list of installed packages and their versions to the remote Boost API, so it returns only version-specific documentation specific for the user's circumstance. You should pass an array of packages to filter on if you know you need docs for particular packages.
|
- Boost comes with a powerful `search-docs` tool you should use before any other approaches when dealing with Laravel or Laravel ecosystem packages. This tool automatically passes a list of installed packages and their versions to the remote Boost API, so it returns only version-specific documentation for the user's circumstance. You should pass an array of packages to filter on if you know you need docs for particular packages.
|
||||||
- The 'search-docs' tool is perfect for all Laravel related packages, including Laravel, Inertia, Livewire, Filament, Tailwind, Pest, Nova, Nightwatch, etc.
|
- The `search-docs` tool is perfect for all Laravel-related packages, including Laravel, Inertia, Livewire, Filament, Tailwind, Pest, Nova, Nightwatch, etc.
|
||||||
- You must use this tool to search for Laravel-ecosystem documentation before falling back to other approaches.
|
- You must use this tool to search for Laravel ecosystem documentation before falling back to other approaches.
|
||||||
- Search the documentation before making code changes to ensure we are taking the correct approach.
|
- Search the documentation before making code changes to ensure we are taking the correct approach.
|
||||||
- Use multiple, broad, simple, topic based queries to start. For example: `['rate limiting', 'routing rate limiting', 'routing']`.
|
- Use multiple, broad, simple, topic-based queries to start. For example: `['rate limiting', 'routing rate limiting', 'routing']`.
|
||||||
- Do not add package names to queries - package information is already shared. For example, use `test resource table`, not `filament 4 test resource table`.
|
- Do not add package names to queries; package information is already shared. For example, use `test resource table`, not `filament 4 test resource table`.
|
||||||
|
|
||||||
### Available Search Syntax
|
### Available Search Syntax
|
||||||
- You can and should pass multiple queries at once. The most relevant results will be returned first.
|
- You can and should pass multiple queries at once. The most relevant results will be returned first.
|
||||||
|
|
||||||
1. Simple Word Searches with auto-stemming - query=authentication - finds 'authenticate' and 'auth'
|
1. Simple Word Searches with auto-stemming - query=authentication - finds 'authenticate' and 'auth'.
|
||||||
2. Multiple Words (AND Logic) - query=rate limit - finds knowledge containing both "rate" AND "limit"
|
2. Multiple Words (AND Logic) - query=rate limit - finds knowledge containing both "rate" AND "limit".
|
||||||
3. Quoted Phrases (Exact Position) - query="infinite scroll" - Words must be adjacent and in that order
|
3. Quoted Phrases (Exact Position) - query="infinite scroll" - words must be adjacent and in that order.
|
||||||
4. Mixed Queries - query=middleware "rate limit" - "middleware" AND exact phrase "rate limit"
|
4. Mixed Queries - query=middleware "rate limit" - "middleware" AND exact phrase "rate limit".
|
||||||
5. Multiple Queries - queries=["authentication", "middleware"] - ANY of these terms
|
5. Multiple Queries - queries=["authentication", "middleware"] - ANY of these terms.
|
||||||
|
|
||||||
|
|
||||||
=== php rules ===
|
=== php rules ===
|
||||||
|
|
||||||
@@ -93,7 +91,7 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||||||
### Constructors
|
### Constructors
|
||||||
- Use PHP 8 constructor property promotion in `__construct()`.
|
- Use PHP 8 constructor property promotion in `__construct()`.
|
||||||
- <code-snippet>public function __construct(public GitHub $github) { }</code-snippet>
|
- <code-snippet>public function __construct(public GitHub $github) { }</code-snippet>
|
||||||
- Do not allow empty `__construct()` methods with zero parameters.
|
- Do not allow empty `__construct()` methods with zero parameters unless the constructor is private.
|
||||||
|
|
||||||
### Type Declarations
|
### Type Declarations
|
||||||
- Always use explicit return type declarations for methods and functions.
|
- Always use explicit return type declarations for methods and functions.
|
||||||
@@ -107,7 +105,7 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
## Comments
|
## Comments
|
||||||
- Prefer PHPDoc blocks over comments. Never use comments within the code itself unless there is something _very_ complex going on.
|
- Prefer PHPDoc blocks over inline comments. Never use comments within the code itself unless there is something very complex going on.
|
||||||
|
|
||||||
## PHPDoc Blocks
|
## PHPDoc Blocks
|
||||||
- Add useful array shape type definitions for arrays when appropriate.
|
- Add useful array shape type definitions for arrays when appropriate.
|
||||||
@@ -115,7 +113,6 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
## Enums
|
## Enums
|
||||||
- Typically, keys in an Enum should be TitleCase. For example: `FavoritePerson`, `BestLake`, `Monthly`.
|
- Typically, keys in an Enum should be TitleCase. For example: `FavoritePerson`, `BestLake`, `Monthly`.
|
||||||
|
|
||||||
|
|
||||||
=== sail rules ===
|
=== sail rules ===
|
||||||
|
|
||||||
## Laravel Sail
|
## Laravel Sail
|
||||||
@@ -123,21 +120,19 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
- This project runs inside Laravel Sail's Docker containers. You MUST execute all commands through Sail.
|
- This project runs inside Laravel Sail's Docker containers. You MUST execute all commands through Sail.
|
||||||
- Start services using `vendor/bin/sail up -d` and stop them with `vendor/bin/sail stop`.
|
- Start services using `vendor/bin/sail up -d` and stop them with `vendor/bin/sail stop`.
|
||||||
- Open the application in the browser by running `vendor/bin/sail open`.
|
- Open the application in the browser by running `vendor/bin/sail open`.
|
||||||
- Always prefix PHP, Artisan, Composer, and Node commands** with `vendor/bin/sail`. Examples:
|
- Always prefix PHP, Artisan, Composer, and Node commands with `vendor/bin/sail`. Examples:
|
||||||
- Run Artisan Commands: `vendor/bin/sail artisan migrate`
|
- Run Artisan Commands: `vendor/bin/sail artisan migrate`
|
||||||
- Install Composer packages: `vendor/bin/sail composer install`
|
- Install Composer packages: `vendor/bin/sail composer install`
|
||||||
- Execute node commands: `vendor/bin/sail yarn run dev`
|
- Execute Node commands: `vendor/bin/sail yarn run dev`
|
||||||
- Execute PHP scripts: `vendor/bin/sail php [script]`
|
- Execute PHP scripts: `vendor/bin/sail php [script]`
|
||||||
- View all available Sail commands by running `vendor/bin/sail` without arguments.
|
- View all available Sail commands by running `vendor/bin/sail` without arguments.
|
||||||
|
|
||||||
|
|
||||||
=== tests rules ===
|
=== tests rules ===
|
||||||
|
|
||||||
## Test Enforcement
|
## Test Enforcement
|
||||||
|
|
||||||
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
|
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
|
||||||
- Run the minimum number of tests needed to ensure code quality and speed. Use `vendor/bin/sail artisan test` with a specific filename or filter.
|
- Run the minimum number of tests needed to ensure code quality and speed. Use `vendor/bin/sail artisan test --compact` with a specific filename or filter.
|
||||||
|
|
||||||
|
|
||||||
=== laravel/core rules ===
|
=== laravel/core rules ===
|
||||||
|
|
||||||
@@ -149,7 +144,7 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
|
|
||||||
### Database
|
### Database
|
||||||
- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.
|
- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.
|
||||||
- Use Eloquent models and relationships before suggesting raw database queries
|
- Use Eloquent models and relationships before suggesting raw database queries.
|
||||||
- Avoid `DB::`; prefer `Model::query()`. Generate code that leverages Laravel's ORM capabilities rather than bypassing them.
|
- Avoid `DB::`; prefer `Model::query()`. Generate code that leverages Laravel's ORM capabilities rather than bypassing them.
|
||||||
- Generate code that prevents N+1 query problems by using eager loading.
|
- Generate code that prevents N+1 query problems by using eager loading.
|
||||||
- Use Laravel's query builder for very complex database operations.
|
- Use Laravel's query builder for very complex database operations.
|
||||||
@@ -184,45 +179,43 @@ protected function isAccessible(User $user, ?string $path = null): bool
|
|||||||
### Vite Error
|
### Vite Error
|
||||||
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `vendor/bin/sail yarn run build` or ask the user to run `vendor/bin/sail yarn run dev` or `vendor/bin/sail composer run dev`.
|
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `vendor/bin/sail yarn run build` or ask the user to run `vendor/bin/sail yarn run dev` or `vendor/bin/sail composer run dev`.
|
||||||
|
|
||||||
|
|
||||||
=== laravel/v12 rules ===
|
=== laravel/v12 rules ===
|
||||||
|
|
||||||
## Laravel 12
|
## Laravel 12
|
||||||
|
|
||||||
- Use the `search-docs` tool to get version specific documentation.
|
- Use the `search-docs` tool to get version-specific documentation.
|
||||||
- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.
|
- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.
|
||||||
|
|
||||||
### Laravel 12 Structure
|
### Laravel 12 Structure
|
||||||
- No middleware files in `app/Http/Middleware/`.
|
- In Laravel 12, middleware are no longer registered in `app/Http/Kernel.php`.
|
||||||
|
- Middleware are configured declaratively in `bootstrap/app.php` using `Application::configure()->withMiddleware()`.
|
||||||
- `bootstrap/app.php` is the file to register middleware, exceptions, and routing files.
|
- `bootstrap/app.php` is the file to register middleware, exceptions, and routing files.
|
||||||
- `bootstrap/providers.php` contains application specific service providers.
|
- `bootstrap/providers.php` contains application specific service providers.
|
||||||
- **No app\Console\Kernel.php** - use `bootstrap/app.php` or `routes/console.php` for console configuration.
|
- The `app\Console\Kernel.php` file no longer exists; use `bootstrap/app.php` or `routes/console.php` for console configuration.
|
||||||
- **Commands auto-register** - files in `app/Console/Commands/` are automatically available and do not require manual registration.
|
- Console commands in `app/Console/Commands/` are automatically available and do not require manual registration.
|
||||||
|
|
||||||
### Database
|
### Database
|
||||||
- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.
|
- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.
|
||||||
- Laravel 11 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.
|
- Laravel 12 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.
|
||||||
|
|
||||||
### Models
|
### Models
|
||||||
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||||
|
|
||||||
|
|
||||||
=== fluxui-pro/core rules ===
|
=== fluxui-pro/core rules ===
|
||||||
|
|
||||||
## Flux UI Pro
|
## Flux UI Pro
|
||||||
|
|
||||||
- This project is using the Pro version of Flux UI. It has full access to the free components and variants, as well as full access to the Pro components and variants.
|
- This project is using the Pro version of Flux UI. It has full access to the free components and variants, as well as full access to the Pro components and variants.
|
||||||
- Flux UI is a component library for Livewire. Flux is a robust, hand-crafted, UI component library for your Livewire applications. It's built using Tailwind CSS and provides a set of components that are easy to use and customize.
|
- Flux UI is a component library for Livewire. Flux is a robust, hand-crafted UI component library for your Livewire applications. It's built using Tailwind CSS and provides a set of components that are easy to use and customize.
|
||||||
- You should use Flux UI components when available.
|
- You should use Flux UI components when available.
|
||||||
- Fallback to standard Blade components if Flux is unavailable.
|
- Fallback to standard Blade components if Flux is unavailable.
|
||||||
- If available, use Laravel Boost's `search-docs` tool to get the exact documentation and code snippets available for this project.
|
- If available, use the `search-docs` tool to get the exact documentation and code snippets available for this project.
|
||||||
- Flux UI components look like this:
|
- Flux UI components look like this:
|
||||||
|
|
||||||
<code-snippet name="Flux UI component usage example" lang="blade">
|
<code-snippet name="Flux UI Component Example" lang="blade">
|
||||||
<flux:button variant="primary"/>
|
<flux:button variant="primary"/>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Available Components
|
### Available Components
|
||||||
This is correct as of Boost installation, but there may be additional components within the codebase.
|
This is correct as of Boost installation, but there may be additional components within the codebase.
|
||||||
|
|
||||||
@@ -230,14 +223,14 @@ This is correct as of Boost installation, but there may be additional components
|
|||||||
accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, callout, card, chart, checkbox, command, composer, context, date-picker, dropdown, editor, field, file-upload, heading, icon, input, kanban, modal, navbar, otp-input, pagination, pillbox, popover, profile, radio, select, separator, skeleton, slider, switch, table, tabs, text, textarea, time-picker, toast, tooltip
|
accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, callout, card, chart, checkbox, command, composer, context, date-picker, dropdown, editor, field, file-upload, heading, icon, input, kanban, modal, navbar, otp-input, pagination, pillbox, popover, profile, radio, select, separator, skeleton, slider, switch, table, tabs, text, textarea, time-picker, toast, tooltip
|
||||||
</available-flux-components>
|
</available-flux-components>
|
||||||
|
|
||||||
|
|
||||||
=== livewire/core rules ===
|
=== livewire/core rules ===
|
||||||
|
|
||||||
## Livewire Core
|
## Livewire
|
||||||
- Use the `search-docs` tool to find exact version specific documentation for how to write Livewire & Livewire tests.
|
|
||||||
- Use the `vendor/bin/sail artisan make:livewire [Posts\CreatePost]` artisan command to create new components
|
- Use the `search-docs` tool to find exact version-specific documentation for how to write Livewire and Livewire tests.
|
||||||
|
- Use the `vendor/bin/sail artisan make:livewire [Posts\CreatePost]` Artisan command to create new components.
|
||||||
- State should live on the server, with the UI reflecting it.
|
- State should live on the server, with the UI reflecting it.
|
||||||
- All Livewire requests hit the Laravel backend, they're like regular HTTP requests. Always validate form data, and run authorization checks in Livewire actions.
|
- All Livewire requests hit the Laravel backend; they're like regular HTTP requests. Always validate form data and run authorization checks in Livewire actions.
|
||||||
|
|
||||||
## Livewire Best Practices
|
## Livewire Best Practices
|
||||||
- Livewire components require a single root element.
|
- Livewire components require a single root element.
|
||||||
@@ -254,15 +247,14 @@ accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, ca
|
|||||||
|
|
||||||
- Prefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects:
|
- Prefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects:
|
||||||
|
|
||||||
<code-snippet name="Lifecycle hook examples" lang="php">
|
<code-snippet name="Lifecycle Hook Examples" lang="php">
|
||||||
public function mount(User $user) { $this->user = $user; }
|
public function mount(User $user) { $this->user = $user; }
|
||||||
public function updatedSearch() { $this->resetPage(); }
|
public function updatedSearch() { $this->resetPage(); }
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
## Testing Livewire
|
## Testing Livewire
|
||||||
|
|
||||||
<code-snippet name="Example Livewire component test" lang="php">
|
<code-snippet name="Example Livewire Component Test" lang="php">
|
||||||
Livewire::test(Counter::class)
|
Livewire::test(Counter::class)
|
||||||
->assertSet('count', 0)
|
->assertSet('count', 0)
|
||||||
->call('increment')
|
->call('increment')
|
||||||
@@ -271,58 +263,20 @@ accordion, autocomplete, avatar, badge, brand, breadcrumbs, button, calendar, ca
|
|||||||
->assertStatus(200);
|
->assertStatus(200);
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
<code-snippet name="Testing Livewire Component Exists on Page" lang="php">
|
||||||
<code-snippet name="Testing a Livewire component exists within a page" lang="php">
|
|
||||||
$this->get('/posts/create')
|
$this->get('/posts/create')
|
||||||
->assertSeeLivewire(CreatePost::class);
|
->assertSeeLivewire(CreatePost::class);
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
=== livewire/v3 rules ===
|
|
||||||
|
|
||||||
## Livewire 3
|
|
||||||
|
|
||||||
### Key Changes From Livewire 2
|
|
||||||
- These things changed in Livewire 2, but may not have been updated in this application. Verify this application's setup to ensure you conform with application conventions.
|
|
||||||
- Use `wire:model.live` for real-time updates, `wire:model` is now deferred by default.
|
|
||||||
- Components now use the `App\Livewire` namespace (not `App\Http\Livewire`).
|
|
||||||
- Use `$this->dispatch()` to dispatch events (not `emit` or `dispatchBrowserEvent`).
|
|
||||||
- Use the `components.layouts.app` view as the typical layout path (not `layouts.app`).
|
|
||||||
|
|
||||||
### New Directives
|
|
||||||
- `wire:show`, `wire:transition`, `wire:cloak`, `wire:offline`, `wire:target` are available for use. Use the documentation to find usage examples.
|
|
||||||
|
|
||||||
### Alpine
|
|
||||||
- Alpine is now included with Livewire, don't manually include Alpine.js.
|
|
||||||
- Plugins included with Alpine: persist, intersect, collapse, and focus.
|
|
||||||
|
|
||||||
### Lifecycle Hooks
|
|
||||||
- You can listen for `livewire:init` to hook into Livewire initialization, and `fail.status === 419` for the page expiring:
|
|
||||||
|
|
||||||
<code-snippet name="livewire:load example" lang="js">
|
|
||||||
document.addEventListener('livewire:init', function () {
|
|
||||||
Livewire.hook('request', ({ fail }) => {
|
|
||||||
if (fail && fail.status === 419) {
|
|
||||||
alert('Your session expired');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Livewire.hook('message.failed', (message, component) => {
|
|
||||||
console.error(message);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</code-snippet>
|
|
||||||
|
|
||||||
|
|
||||||
=== volt/core rules ===
|
=== volt/core rules ===
|
||||||
|
|
||||||
## Livewire Volt
|
## Livewire Volt
|
||||||
|
|
||||||
- This project uses Livewire Volt for interactivity within its pages. New pages requiring interactivity must also use Livewire Volt. There is documentation available for it.
|
- This project uses Livewire Volt for interactivity within its pages. New pages requiring interactivity must also use Livewire Volt.
|
||||||
- Make new Volt components using `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`
|
- Make new Volt components using `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`.
|
||||||
- Volt is a **class-based** and **functional** API for Livewire that supports single-file components, allowing a component's PHP logic and Blade templates to co-exist in the same file
|
- Volt is a class-based and functional API for Livewire that supports single-file components, allowing a component's PHP logic and Blade templates to coexist in the same file.
|
||||||
- Livewire Volt allows PHP logic and Blade templates in one file. Components use the `@volt` directive.
|
- Livewire Volt allows PHP logic and Blade templates in one file. Components use the `@volt` directive.
|
||||||
- You must check existing Volt components to determine if they're functional or class based. If you can't detect that, ask the user which they prefer before writing a Volt component.
|
- You must check existing Volt components to determine if they're functional or class-based. If you can't detect that, ask the user which they prefer before writing a Volt component.
|
||||||
|
|
||||||
### Volt Functional Component Example
|
### Volt Functional Component Example
|
||||||
|
|
||||||
@@ -348,11 +302,9 @@ $double = computed(fn () => $this->count * 2);
|
|||||||
@endvolt
|
@endvolt
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Volt Class Based Component Example
|
### Volt Class Based Component Example
|
||||||
To get started, define an anonymous class that extends Livewire\Volt\Component. Within the class, you may utilize all of the features of Livewire using traditional Livewire syntax:
|
To get started, define an anonymous class that extends Livewire\Volt\Component. Within the class, you may utilize all of the features of Livewire using traditional Livewire syntax:
|
||||||
|
|
||||||
|
|
||||||
<code-snippet name="Volt Class-based Volt Component Example" lang="php">
|
<code-snippet name="Volt Class-based Volt Component Example" lang="php">
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Volt\Component;
|
||||||
|
|
||||||
@@ -371,7 +323,6 @@ new class extends Component {
|
|||||||
</div>
|
</div>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Testing Volt & Volt Components
|
### Testing Volt & Volt Components
|
||||||
- Use the existing directory for tests if it already exists. Otherwise, fallback to `tests/Feature/Volt`.
|
- Use the existing directory for tests if it already exists. Otherwise, fallback to `tests/Feature/Volt`.
|
||||||
|
|
||||||
@@ -386,7 +337,6 @@ test('counter increments', function () {
|
|||||||
});
|
});
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
<code-snippet name="Volt Component Test Using Pest" lang="php">
|
<code-snippet name="Volt Component Test Using Pest" lang="php">
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
@@ -408,10 +358,8 @@ test('product form creates product', function () {
|
|||||||
});
|
});
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Common Patterns
|
### Common Patterns
|
||||||
|
|
||||||
|
|
||||||
<code-snippet name="CRUD With Volt" lang="php">
|
<code-snippet name="CRUD With Volt" lang="php">
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
@@ -446,7 +394,6 @@ $delete = fn(Product $product) => $product->delete();
|
|||||||
</flux:button>
|
</flux:button>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
=== pint/core rules ===
|
=== pint/core rules ===
|
||||||
|
|
||||||
## Laravel Pint Code Formatter
|
## Laravel Pint Code Formatter
|
||||||
@@ -454,7 +401,6 @@ $delete = fn(Product $product) => $product->delete();
|
|||||||
- You must run `vendor/bin/sail bin pint --dirty` before finalizing changes to ensure your code matches the project's expected style.
|
- You must run `vendor/bin/sail bin pint --dirty` before finalizing changes to ensure your code matches the project's expected style.
|
||||||
- Do not run `vendor/bin/sail bin pint --test`, simply run `vendor/bin/sail bin pint` to fix any formatting issues.
|
- Do not run `vendor/bin/sail bin pint --test`, simply run `vendor/bin/sail bin pint` to fix any formatting issues.
|
||||||
|
|
||||||
|
|
||||||
=== pest/core rules ===
|
=== pest/core rules ===
|
||||||
|
|
||||||
## Pest
|
## Pest
|
||||||
@@ -475,9 +421,9 @@ it('is true', function () {
|
|||||||
|
|
||||||
### Running Tests
|
### Running Tests
|
||||||
- Run the minimal number of tests using an appropriate filter before finalizing code edits.
|
- Run the minimal number of tests using an appropriate filter before finalizing code edits.
|
||||||
- To run all tests: `vendor/bin/sail artisan test`.
|
- To run all tests: `vendor/bin/sail artisan test --compact`.
|
||||||
- To run all tests in a file: `vendor/bin/sail artisan test tests/Feature/ExampleTest.php`.
|
- To run all tests in a file: `vendor/bin/sail artisan test --compact tests/Feature/ExampleTest.php`.
|
||||||
- To filter on a particular test name: `vendor/bin/sail artisan test --filter=testName` (recommended after making a change to a related file).
|
- To filter on a particular test name: `vendor/bin/sail artisan test --compact --filter=testName` (recommended after making a change to a related file).
|
||||||
- When the tests relating to your changes are passing, ask the user if they would like to run the entire test suite to ensure everything is still passing.
|
- When the tests relating to your changes are passing, ask the user if they would like to run the entire test suite to ensure everything is still passing.
|
||||||
|
|
||||||
### Pest Assertions
|
### Pest Assertions
|
||||||
@@ -496,7 +442,7 @@ it('returns all', function () {
|
|||||||
- You can also create partial mocks using the same import or self method.
|
- You can also create partial mocks using the same import or self method.
|
||||||
|
|
||||||
### Datasets
|
### Datasets
|
||||||
- Use datasets in Pest to simplify tests which have a lot of duplicated data. This is often the case when testing validation rules, so consider going with this solution when writing tests for validation rules.
|
- Use datasets in Pest to simplify tests that have a lot of duplicated data. This is often the case when testing validation rules, so consider this solution when writing tests for validation rules.
|
||||||
|
|
||||||
<code-snippet name="Pest Dataset Example" lang="php">
|
<code-snippet name="Pest Dataset Example" lang="php">
|
||||||
it('has emails', function (string $email) {
|
it('has emails', function (string $email) {
|
||||||
@@ -507,18 +453,17 @@ it('has emails', function (string $email) {
|
|||||||
]);
|
]);
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
=== tailwindcss/core rules ===
|
=== tailwindcss/core rules ===
|
||||||
|
|
||||||
## Tailwind Core
|
## Tailwind CSS
|
||||||
|
|
||||||
- Use Tailwind CSS classes to style HTML, check and use existing tailwind conventions within the project before writing your own.
|
- Use Tailwind CSS classes to style HTML; check and use existing Tailwind conventions within the project before writing your own.
|
||||||
- Offer to extract repeated patterns into components that match the project's conventions (i.e. Blade, JSX, Vue, etc..)
|
- Offer to extract repeated patterns into components that match the project's conventions (i.e. Blade, JSX, Vue, etc.).
|
||||||
- Think through class placement, order, priority, and defaults - remove redundant classes, add classes to parent or child carefully to limit repetition, group elements logically
|
- Think through class placement, order, priority, and defaults. Remove redundant classes, add classes to parent or child carefully to limit repetition, and group elements logically.
|
||||||
- You can use the `search-docs` tool to get exact examples from the official documentation when needed.
|
- You can use the `search-docs` tool to get exact examples from the official documentation when needed.
|
||||||
|
|
||||||
### Spacing
|
### Spacing
|
||||||
- When listing items, use gap utilities for spacing, don't use margins.
|
- When listing items, use gap utilities for spacing; don't use margins.
|
||||||
|
|
||||||
<code-snippet name="Valid Flex Gap Spacing Example" lang="html">
|
<code-snippet name="Valid Flex Gap Spacing Example" lang="html">
|
||||||
<div class="flex gap-8">
|
<div class="flex gap-8">
|
||||||
@@ -528,18 +473,17 @@ it('has emails', function (string $email) {
|
|||||||
</div>
|
</div>
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Dark Mode
|
### Dark Mode
|
||||||
- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`.
|
- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`.
|
||||||
|
|
||||||
|
|
||||||
=== tailwindcss/v4 rules ===
|
=== tailwindcss/v4 rules ===
|
||||||
|
|
||||||
## Tailwind 4
|
## Tailwind CSS 4
|
||||||
|
|
||||||
- Always use Tailwind CSS v4 - do not use the deprecated utilities.
|
- Always use Tailwind CSS v4; do not use the deprecated utilities.
|
||||||
- `corePlugins` is not supported in Tailwind v4.
|
- `corePlugins` is not supported in Tailwind v4.
|
||||||
- In Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed.
|
- In Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed.
|
||||||
|
|
||||||
<code-snippet name="Extending Theme in CSS" lang="css">
|
<code-snippet name="Extending Theme in CSS" lang="css">
|
||||||
@theme {
|
@theme {
|
||||||
--color-brand: oklch(0.72 0.11 178);
|
--color-brand: oklch(0.72 0.11 178);
|
||||||
@@ -555,9 +499,8 @@ it('has emails', function (string $email) {
|
|||||||
+ @import "tailwindcss";
|
+ @import "tailwindcss";
|
||||||
</code-snippet>
|
</code-snippet>
|
||||||
|
|
||||||
|
|
||||||
### Replaced Utilities
|
### Replaced Utilities
|
||||||
- Tailwind v4 removed deprecated utilities. Do not use the deprecated option - use the replacement.
|
- Tailwind v4 removed deprecated utilities. Do not use the deprecated option; use the replacement.
|
||||||
- Opacity values are still numeric.
|
- Opacity values are still numeric.
|
||||||
|
|
||||||
| Deprecated | Replacement |
|
| Deprecated | Replacement |
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"agents": [
|
"agents": [
|
||||||
"claude_code",
|
"claude_code",
|
||||||
"cursor",
|
"opencode",
|
||||||
"phpstorm"
|
"phpstorm"
|
||||||
],
|
],
|
||||||
"editors": [
|
"editors": [
|
||||||
"claude_code",
|
"claude_code",
|
||||||
"cursor",
|
"opencode",
|
||||||
"phpstorm"
|
"phpstorm"
|
||||||
],
|
],
|
||||||
"guidelines": [],
|
"guidelines": [],
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
],
|
],
|
||||||
"post-update-cmd": [
|
"post-update-cmd": [
|
||||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force",
|
"@php artisan vendor:publish --tag=laravel-assets --ansi --force",
|
||||||
"@php artisan lang:update"
|
"@php artisan lang:update",
|
||||||
|
"@php artisan boost:update --ansi"
|
||||||
],
|
],
|
||||||
"post-root-package-install": [
|
"post-root-package-install": [
|
||||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||||
|
|||||||
901
composer.lock
generated
901
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,11 @@
|
|||||||
services:
|
services:
|
||||||
laravel.test:
|
laravel.test:
|
||||||
build:
|
build:
|
||||||
context: './vendor/laravel/sail/runtimes/8.4'
|
context: './docker/8.3'
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
WWWGROUP: '${WWWGROUP}'
|
WWWGROUP: '${WWWGROUP}'
|
||||||
image: 'sail-8.4/app'
|
image: 'sail-8.3/einundzwanzig-app'
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- 'host.docker.internal:host-gateway'
|
- 'host.docker.internal:host-gateway'
|
||||||
ports:
|
ports:
|
||||||
@@ -36,7 +36,7 @@ services:
|
|||||||
POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
|
POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
|
||||||
volumes:
|
volumes:
|
||||||
- 'sail-pgsql:/var/lib/postgresql/data'
|
- 'sail-pgsql:/var/lib/postgresql/data'
|
||||||
- './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'
|
- './docker/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'
|
||||||
networks:
|
networks:
|
||||||
- sail
|
- sail
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|||||||
75
docker/8.3/Dockerfile
Normal file
75
docker/8.3/Dockerfile
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
|
LABEL maintainer="Taylor Otwell"
|
||||||
|
|
||||||
|
ARG WWWGROUP
|
||||||
|
ARG NODE_VERSION=24
|
||||||
|
ARG MYSQL_CLIENT="mysql-client"
|
||||||
|
ARG POSTGRES_VERSION=18
|
||||||
|
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV TZ=UTC
|
||||||
|
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
|
||||||
|
ENV SUPERVISOR_PHP_USER="sail"
|
||||||
|
ENV PLAYWRIGHT_BROWSERS_PATH=0
|
||||||
|
|
||||||
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
|
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
|
||||||
|
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
|
||||||
|
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get upgrade -y \
|
||||||
|
&& mkdir -p /etc/apt/keyrings \
|
||||||
|
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
|
||||||
|
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y php8.3-cli php8.3-dev \
|
||||||
|
php8.3-pgsql php8.3-sqlite3 php8.3-gd \
|
||||||
|
php8.3-curl php8.3-mongodb \
|
||||||
|
php8.3-imap php8.3-mysql php8.3-mbstring \
|
||||||
|
php8.3-xml php8.3-zip php8.3-bcmath php8.3-soap \
|
||||||
|
php8.3-intl php8.3-readline \
|
||||||
|
php8.3-ldap \
|
||||||
|
php8.3-gmp \
|
||||||
|
php8.3-msgpack php8.3-igbinary php8.3-redis \
|
||||||
|
php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug php8.3-swoole \
|
||||||
|
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
|
||||||
|
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y nodejs \
|
||||||
|
&& npm install -g npm \
|
||||||
|
&& npm install -g pnpm \
|
||||||
|
&& npm install -g bun \
|
||||||
|
&& npx playwright install-deps \
|
||||||
|
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
|
||||||
|
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y yarn \
|
||||||
|
&& apt-get install -y $MYSQL_CLIENT \
|
||||||
|
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
|
||||||
|
&& apt-get -y autoremove \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3
|
||||||
|
|
||||||
|
RUN userdel -r ubuntu
|
||||||
|
RUN groupadd --force -g $WWWGROUP sail
|
||||||
|
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
|
||||||
|
RUN git config --global --add safe.directory /var/www/html
|
||||||
|
|
||||||
|
COPY start-container /usr/local/bin/start-container
|
||||||
|
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||||
|
COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini
|
||||||
|
RUN chmod +x /usr/local/bin/start-container
|
||||||
|
|
||||||
|
EXPOSE 80/tcp
|
||||||
|
|
||||||
|
ENTRYPOINT ["start-container"]
|
||||||
5
docker/8.3/php.ini
Normal file
5
docker/8.3/php.ini
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[PHP]
|
||||||
|
post_max_size = 100M
|
||||||
|
upload_max_filesize = 100M
|
||||||
|
variables_order = EGPCS
|
||||||
|
pcov.directory = .
|
||||||
26
docker/8.3/start-container
Normal file
26
docker/8.3/start-container
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
|
||||||
|
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -z "$WWWUSER" ]; then
|
||||||
|
usermod -u $WWWUSER sail
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d /.composer ]; then
|
||||||
|
mkdir /.composer
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod -R ugo+rw /.composer
|
||||||
|
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
|
||||||
|
exec "$@"
|
||||||
|
else
|
||||||
|
exec gosu $WWWUSER "$@"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
|
||||||
|
fi
|
||||||
14
docker/8.3/supervisord.conf
Normal file
14
docker/8.3/supervisord.conf
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[supervisord]
|
||||||
|
nodaemon=true
|
||||||
|
user=root
|
||||||
|
logfile=/var/log/supervisor/supervisord.log
|
||||||
|
pidfile=/var/run/supervisord.pid
|
||||||
|
|
||||||
|
[program:php]
|
||||||
|
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
|
||||||
|
user=%(ENV_SUPERVISOR_PHP_USER)s
|
||||||
|
environment=LARAVEL_SAIL="1"
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes=0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
91
docker/8.5/Dockerfile
Normal file
91
docker/8.5/Dockerfile
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
|
LABEL maintainer="Taylor Otwell"
|
||||||
|
|
||||||
|
ARG WWWGROUP
|
||||||
|
ARG NODE_VERSION=24
|
||||||
|
ARG MYSQL_CLIENT="mysql-client"
|
||||||
|
ARG POSTGRES_VERSION=18
|
||||||
|
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV TZ=UTC
|
||||||
|
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
|
||||||
|
ENV SUPERVISOR_PHP_USER="sail"
|
||||||
|
ENV PLAYWRIGHT_BROWSERS_PATH=0
|
||||||
|
|
||||||
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
|
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
|
||||||
|
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
|
||||||
|
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get upgrade -y \
|
||||||
|
&& mkdir -p /etc/apt/keyrings \
|
||||||
|
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
|
||||||
|
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y \
|
||||||
|
php8.5-cli \
|
||||||
|
php8.5-dev \
|
||||||
|
php8.5-pgsql \
|
||||||
|
php8.5-sqlite3 \
|
||||||
|
php8.5-gd \
|
||||||
|
php8.5-curl \
|
||||||
|
php8.5-mongodb \
|
||||||
|
php8.5-imap \
|
||||||
|
php8.5-mysql \
|
||||||
|
php8.5-mbstring \
|
||||||
|
php8.5-xml \
|
||||||
|
php8.5-zip \
|
||||||
|
php8.5-bcmath \
|
||||||
|
php8.5-soap \
|
||||||
|
php8.5-intl \
|
||||||
|
php8.5-readline \
|
||||||
|
php8.5-ldap \
|
||||||
|
php8.5-msgpack \
|
||||||
|
php8.5-igbinary \
|
||||||
|
php8.5-redis \
|
||||||
|
#php8.5-swoole \
|
||||||
|
php8.5-memcached \
|
||||||
|
php8.5-pcov \
|
||||||
|
php8.5-imagick \
|
||||||
|
#php8.5-xdebug \
|
||||||
|
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
|
||||||
|
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y nodejs \
|
||||||
|
&& npm install -g npm \
|
||||||
|
&& npm install -g pnpm \
|
||||||
|
&& npm install -g bun \
|
||||||
|
&& npx playwright install-deps \
|
||||||
|
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
|
||||||
|
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
|
||||||
|
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y yarn \
|
||||||
|
&& apt-get install -y $MYSQL_CLIENT \
|
||||||
|
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
|
||||||
|
&& apt-get -y autoremove \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.5
|
||||||
|
|
||||||
|
RUN userdel -r ubuntu
|
||||||
|
RUN groupadd --force -g $WWWGROUP sail
|
||||||
|
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
|
||||||
|
RUN git config --global --add safe.directory /var/www/html
|
||||||
|
|
||||||
|
COPY start-container /usr/local/bin/start-container
|
||||||
|
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||||
|
COPY php.ini /etc/php/8.5/cli/conf.d/99-sail.ini
|
||||||
|
RUN chmod +x /usr/local/bin/start-container
|
||||||
|
|
||||||
|
EXPOSE 80/tcp
|
||||||
|
|
||||||
|
ENTRYPOINT ["start-container"]
|
||||||
5
docker/8.5/php.ini
Normal file
5
docker/8.5/php.ini
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[PHP]
|
||||||
|
post_max_size = 100M
|
||||||
|
upload_max_filesize = 100M
|
||||||
|
variables_order = EGPCS
|
||||||
|
pcov.directory = .
|
||||||
26
docker/8.5/start-container
Normal file
26
docker/8.5/start-container
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
|
||||||
|
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -z "$WWWUSER" ]; then
|
||||||
|
usermod -u $WWWUSER sail
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d /.composer ]; then
|
||||||
|
mkdir /.composer
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod -R ugo+rw /.composer
|
||||||
|
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
|
||||||
|
exec "$@"
|
||||||
|
else
|
||||||
|
exec gosu $WWWUSER "$@"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
|
||||||
|
fi
|
||||||
14
docker/8.5/supervisord.conf
Normal file
14
docker/8.5/supervisord.conf
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[supervisord]
|
||||||
|
nodaemon=true
|
||||||
|
user=root
|
||||||
|
logfile=/var/log/supervisor/supervisord.log
|
||||||
|
pidfile=/var/run/supervisord.pid
|
||||||
|
|
||||||
|
[program:php]
|
||||||
|
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
|
||||||
|
user=%(ENV_SUPERVISOR_PHP_USER)s
|
||||||
|
environment=LARAVEL_SAIL="1"
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes=0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
2
docker/pgsql/create-testing-database.sql
Normal file
2
docker/pgsql/create-testing-database.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
SELECT 'CREATE DATABASE testing'
|
||||||
|
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "",
|
"Anonymous": "",
|
||||||
"App": "",
|
"App": "",
|
||||||
"Appearance": "Darstellung",
|
"Appearance": "Darstellung",
|
||||||
|
"Appearance Settings": "Darstellungseinstellungen",
|
||||||
"Are you sure you want to delete your account?": "Möchten Sie Ihr Konto wirklich löschen?",
|
"Are you sure you want to delete your account?": "Möchten Sie Ihr Konto wirklich löschen?",
|
||||||
"Art des Services": "",
|
"Art des Services": "",
|
||||||
"Auf Karte sichtbar": "",
|
"Auf Karte sichtbar": "",
|
||||||
@@ -348,6 +349,7 @@
|
|||||||
"Pagination Navigation": "Seiten-Navigation",
|
"Pagination Navigation": "Seiten-Navigation",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "",
|
||||||
"Password": "Passwort",
|
"Password": "Passwort",
|
||||||
|
"Password Settings": "Passworteinstellungen",
|
||||||
"Passwort ändern - Bitcoin Meetups": "",
|
"Passwort ändern - Bitcoin Meetups": "",
|
||||||
"Payment Required": "Zahlung erforderlich",
|
"Payment Required": "Zahlung erforderlich",
|
||||||
"PayNym": "",
|
"PayNym": "",
|
||||||
@@ -363,7 +365,9 @@
|
|||||||
"Population Date": "",
|
"Population Date": "",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "",
|
"Profil bearbeiten - Bitcoin Meetups": "",
|
||||||
"Profile": "Profil",
|
"Profile": "Profil",
|
||||||
|
"Profile Settings": "Profileinstellungen",
|
||||||
"Recovery Code": "Wiederherstellungscode",
|
"Recovery Code": "Wiederherstellungscode",
|
||||||
|
"Recovery codes": "Wiederherstellungscodes",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Mit Wiederherstellungscodes können Sie wieder Zugriff erhalten, wenn Sie Ihr 2FA-Gerät verlieren. Speichern Sie diese in einem sicheren Passwort-Manager.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Mit Wiederherstellungscodes können Sie wieder Zugriff erhalten, wenn Sie Ihr 2FA-Gerät verlieren. Speichern Sie diese in einem sicheren Passwort-Manager.",
|
||||||
"Regards,": "Mit freundlichen Grüßen,",
|
"Regards,": "Mit freundlichen Grüßen,",
|
||||||
"Regenerate Codes": "Codes neu generieren",
|
"Regenerate Codes": "Codes neu generieren",
|
||||||
@@ -464,6 +468,7 @@
|
|||||||
"Two-Factor Auth": "Zwei-Faktor-Authentifizierung",
|
"Two-Factor Auth": "Zwei-Faktor-Authentifizierung",
|
||||||
"Two-Factor Authentication Enabled": "Zwei-Faktor-Authentifizierung aktiviert",
|
"Two-Factor Authentication Enabled": "Zwei-Faktor-Authentifizierung aktiviert",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Die Zwei-Faktor-Authentifizierung ist nun aktiviert. Scannen Sie den QR-Code oder geben Sie den Setup-Schlüssel in Ihrer Authentifizierungs-App ein.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Die Zwei-Faktor-Authentifizierung ist nun aktiviert. Scannen Sie den QR-Code oder geben Sie den Setup-Schlüssel in Ihrer Authentifizierungs-App ein.",
|
||||||
|
"Two-Factor Authentication Settings": "Zwei-Faktor-Authentifizierun Einstellungen",
|
||||||
"Typ": "",
|
"Typ": "",
|
||||||
"Uhr": "",
|
"Uhr": "",
|
||||||
"Uhrzeit": "",
|
"Uhrzeit": "",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "Anonymous",
|
"Anonymous": "Anonymous",
|
||||||
"App": "App",
|
"App": "App",
|
||||||
"Appearance": "Appearance",
|
"Appearance": "Appearance",
|
||||||
|
"Appearance Settings": "Appearance Settings",
|
||||||
"Are you sure you want to delete your account?": "Are you sure you want to delete your account?",
|
"Are you sure you want to delete your account?": "Are you sure you want to delete your account?",
|
||||||
"Art des Services": "Type of service",
|
"Art des Services": "Type of service",
|
||||||
"Auf Karte sichtbar": "Visible on map",
|
"Auf Karte sichtbar": "Visible on map",
|
||||||
@@ -348,6 +349,7 @@
|
|||||||
"Pagination Navigation": "Pagination Navigation",
|
"Pagination Navigation": "Pagination Navigation",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Customize the appearance of your Bitcoin Meetup profile.",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Customize the appearance of your Bitcoin Meetup profile.",
|
||||||
"Password": "Password",
|
"Password": "Password",
|
||||||
|
"Password Settings": "Password Settings",
|
||||||
"Passwort ändern - Bitcoin Meetups": "Change Password - Bitcoin Meetups",
|
"Passwort ändern - Bitcoin Meetups": "Change Password - Bitcoin Meetups",
|
||||||
"Payment Required": "Payment Required",
|
"Payment Required": "Payment Required",
|
||||||
"PayNym": "PayNym",
|
"PayNym": "PayNym",
|
||||||
@@ -363,7 +365,9 @@
|
|||||||
"Population Date": "Population Date",
|
"Population Date": "Population Date",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "Edit Profile - Bitcoin Meetups",
|
"Profil bearbeiten - Bitcoin Meetups": "Edit Profile - Bitcoin Meetups",
|
||||||
"Profile": "Profile",
|
"Profile": "Profile",
|
||||||
|
"Profile Settings": "Profile Settings",
|
||||||
"Recovery Code": "Recovery Code",
|
"Recovery Code": "Recovery Code",
|
||||||
|
"Recovery codes": "Recovery codes",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
||||||
"Regards,": "Regards,",
|
"Regards,": "Regards,",
|
||||||
"Regenerate Codes": "Regenerate Codes",
|
"Regenerate Codes": "Regenerate Codes",
|
||||||
@@ -464,6 +468,7 @@
|
|||||||
"Two-Factor Auth": "Two-Factor Auth",
|
"Two-Factor Auth": "Two-Factor Auth",
|
||||||
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
||||||
|
"Two-Factor Authentication Settings": "Two-Factor Authentication Settings",
|
||||||
"Typ": "Type",
|
"Typ": "Type",
|
||||||
"Uhr": "o'clock",
|
"Uhr": "o'clock",
|
||||||
"Uhrzeit": "Time",
|
"Uhrzeit": "Time",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "Anónimo",
|
"Anonymous": "Anónimo",
|
||||||
"App": "Aplicación",
|
"App": "Aplicación",
|
||||||
"Appearance": "Apariencia",
|
"Appearance": "Apariencia",
|
||||||
|
"Appearance Settings": "Configuración de Apariencia",
|
||||||
"Are you sure you want to delete your account?": "¿Está seguro que desea eliminar su cuenta?",
|
"Are you sure you want to delete your account?": "¿Está seguro que desea eliminar su cuenta?",
|
||||||
"Art des Services": "Tipo de servicio",
|
"Art des Services": "Tipo de servicio",
|
||||||
"Auf Karte sichtbar": "Visible en el mapa",
|
"Auf Karte sichtbar": "Visible en el mapa",
|
||||||
@@ -347,6 +348,7 @@
|
|||||||
"Pagination Navigation": "Navegación por los enlaces de paginación",
|
"Pagination Navigation": "Navegación por los enlaces de paginación",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Personaliza la apariencia de tu perfil de Encuentros Bitcoin.",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Personaliza la apariencia de tu perfil de Encuentros Bitcoin.",
|
||||||
"Password": "Contraseña",
|
"Password": "Contraseña",
|
||||||
|
"Password Settings": "Configuración de Contraseña",
|
||||||
"Passwort ändern - Bitcoin Meetups": "Cambiar contraseña - Encuentros Bitcoin",
|
"Passwort ändern - Bitcoin Meetups": "Cambiar contraseña - Encuentros Bitcoin",
|
||||||
"Payment Required": "Pago requerido",
|
"Payment Required": "Pago requerido",
|
||||||
"PayNym": "PayNym",
|
"PayNym": "PayNym",
|
||||||
@@ -362,7 +364,9 @@
|
|||||||
"Population Date": "Fecha de población",
|
"Population Date": "Fecha de población",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "Editar perfil - Encuentros Bitcoin",
|
"Profil bearbeiten - Bitcoin Meetups": "Editar perfil - Encuentros Bitcoin",
|
||||||
"Profile": "Perfil",
|
"Profile": "Perfil",
|
||||||
|
"Profile Settings": "Configuración de Perfil",
|
||||||
"Recovery Code": "Código de recuperación",
|
"Recovery Code": "Código de recuperación",
|
||||||
|
"Recovery codes": "Códigos de recuperación",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Los códigos de recuperación le permiten recuperar el acceso si pierde su dispositivo con autenticación de dos factores. Guárdelos en un gestor de contraseñas seguro.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Los códigos de recuperación le permiten recuperar el acceso si pierde su dispositivo con autenticación de dos factores. Guárdelos en un gestor de contraseñas seguro.",
|
||||||
"Regards,": "Saludos,",
|
"Regards,": "Saludos,",
|
||||||
"Regenerate Codes": "Regenerar códigos",
|
"Regenerate Codes": "Regenerar códigos",
|
||||||
@@ -463,6 +467,7 @@
|
|||||||
"Two-Factor Auth": "Autenticación de Dos Factores",
|
"Two-Factor Auth": "Autenticación de Dos Factores",
|
||||||
"Two-Factor Authentication Enabled": "Autenticación de dos factores habilitada",
|
"Two-Factor Authentication Enabled": "Autenticación de dos factores habilitada",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "La autenticación de dos factores ya está habilitada. Escanea el código QR o introduce la clave de configuración en tu app de autenticación.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "La autenticación de dos factores ya está habilitada. Escanea el código QR o introduce la clave de configuración en tu app de autenticación.",
|
||||||
|
"Two-Factor Authentication Settings": "Ajustes de la Autenticación de Dos Factores",
|
||||||
"Typ": "Tipo",
|
"Typ": "Tipo",
|
||||||
"Uhr": "hora",
|
"Uhr": "hora",
|
||||||
"Uhrzeit": "Hora",
|
"Uhrzeit": "Hora",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "Névtelen",
|
"Anonymous": "Névtelen",
|
||||||
"App": "Alkalmazás",
|
"App": "Alkalmazás",
|
||||||
"Appearance": "Megjelenés",
|
"Appearance": "Megjelenés",
|
||||||
|
"Appearance Settings": "Appearance Settings",
|
||||||
"Are you sure you want to delete your account?": "Biztos benne, hogy törölni akarja fiókját?",
|
"Are you sure you want to delete your account?": "Biztos benne, hogy törölni akarja fiókját?",
|
||||||
"Art des Services": "Szolgáltatás típusa",
|
"Art des Services": "Szolgáltatás típusa",
|
||||||
"Auf Karte sichtbar": "Látható a térképen",
|
"Auf Karte sichtbar": "Látható a térképen",
|
||||||
@@ -347,6 +348,7 @@
|
|||||||
"Pagination Navigation": "Oldalszámozás Navigáció",
|
"Pagination Navigation": "Oldalszámozás Navigáció",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Szabd testre Bitcoin meetup profilod megjelenését.",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Szabd testre Bitcoin meetup profilod megjelenését.",
|
||||||
"Password": "Jelszó",
|
"Password": "Jelszó",
|
||||||
|
"Password Settings": "Password Settings",
|
||||||
"Passwort ändern - Bitcoin Meetups": "Jelszó módosítása - Bitcoin Meetupok",
|
"Passwort ändern - Bitcoin Meetups": "Jelszó módosítása - Bitcoin Meetupok",
|
||||||
"Payment Required": "fizetés szükséges",
|
"Payment Required": "fizetés szükséges",
|
||||||
"PayNym": "PayNym",
|
"PayNym": "PayNym",
|
||||||
@@ -362,7 +364,9 @@
|
|||||||
"Population Date": "Népesség dátuma",
|
"Population Date": "Népesség dátuma",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "Profil szerkesztése - Bitcoin Meetupok",
|
"Profil bearbeiten - Bitcoin Meetups": "Profil szerkesztése - Bitcoin Meetupok",
|
||||||
"Profile": "Profil",
|
"Profile": "Profil",
|
||||||
|
"Profile Settings": "Profile Settings",
|
||||||
"Recovery Code": "Helyreállítási kód",
|
"Recovery Code": "Helyreállítási kód",
|
||||||
|
"Recovery codes": "Recovery codes",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "A helyreállítási kódok lehetővé teszik a hozzáférést, ha elveszítik a 2FA -eszközt. Tárolja őket egy biztonságos jelszókezelőben.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "A helyreállítási kódok lehetővé teszik a hozzáférést, ha elveszítik a 2FA -eszközt. Tárolja őket egy biztonságos jelszókezelőben.",
|
||||||
"Regards,": "Üdvözlettel,",
|
"Regards,": "Üdvözlettel,",
|
||||||
"Regenerate Codes": "A kódok regenerálása",
|
"Regenerate Codes": "A kódok regenerálása",
|
||||||
@@ -463,6 +467,7 @@
|
|||||||
"Two-Factor Auth": "Kéttényezős Auth",
|
"Two-Factor Auth": "Kéttényezős Auth",
|
||||||
"Two-Factor Authentication Enabled": "A két tényezős hitelesítés engedélyezve",
|
"Two-Factor Authentication Enabled": "A két tényezős hitelesítés engedélyezve",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "A két tényezős hitelesítés már engedélyezve van. Vizsgálja meg a QR -kódot, vagy írja be a Setup gombot az Authenticator alkalmazásba.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "A két tényezős hitelesítés már engedélyezve van. Vizsgálja meg a QR -kódot, vagy írja be a Setup gombot az Authenticator alkalmazásba.",
|
||||||
|
"Two-Factor Authentication Settings": "Two-Factor Authentication Settings",
|
||||||
"Typ": "Típus",
|
"Typ": "Típus",
|
||||||
"Uhr": "óra",
|
"Uhr": "óra",
|
||||||
"Uhrzeit": "Időpont",
|
"Uhrzeit": "Időpont",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "Anoniem",
|
"Anonymous": "Anoniem",
|
||||||
"App": "App",
|
"App": "App",
|
||||||
"Appearance": "Weergave",
|
"Appearance": "Weergave",
|
||||||
|
"Appearance Settings": "Appearance Settings",
|
||||||
"Are you sure you want to delete your account?": "Weet je zeker dat je je account wilt verwijderen?",
|
"Are you sure you want to delete your account?": "Weet je zeker dat je je account wilt verwijderen?",
|
||||||
"Art des Services": "Type service",
|
"Art des Services": "Type service",
|
||||||
"Auf Karte sichtbar": "Zichtbaar op kaart",
|
"Auf Karte sichtbar": "Zichtbaar op kaart",
|
||||||
@@ -348,6 +349,7 @@
|
|||||||
"Pagination Navigation": "Paginanavigatie",
|
"Pagination Navigation": "Paginanavigatie",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Pas het uiterlijk van je Bitcoin Meetup-profiel aan.",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Pas het uiterlijk van je Bitcoin Meetup-profiel aan.",
|
||||||
"Password": "Wachtwoord",
|
"Password": "Wachtwoord",
|
||||||
|
"Password Settings": "Password Settings",
|
||||||
"Passwort ändern - Bitcoin Meetups": "Wachtwoord wijzigen - Bitcoin Meetups",
|
"Passwort ändern - Bitcoin Meetups": "Wachtwoord wijzigen - Bitcoin Meetups",
|
||||||
"Payment Required": "Betaling vereist",
|
"Payment Required": "Betaling vereist",
|
||||||
"PayNym": "PayNym",
|
"PayNym": "PayNym",
|
||||||
@@ -363,7 +365,9 @@
|
|||||||
"Population Date": "Bevolkingsdatum",
|
"Population Date": "Bevolkingsdatum",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "Profiel bewerken - Bitcoin Meetups",
|
"Profil bearbeiten - Bitcoin Meetups": "Profiel bewerken - Bitcoin Meetups",
|
||||||
"Profile": "Profiel",
|
"Profile": "Profiel",
|
||||||
|
"Profile Settings": "Profile Settings",
|
||||||
"Recovery Code": "Recovery Code",
|
"Recovery Code": "Recovery Code",
|
||||||
|
"Recovery codes": "Recovery codes",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
||||||
"Regards,": "Met vriendelijke groet,",
|
"Regards,": "Met vriendelijke groet,",
|
||||||
"Regenerate Codes": "Regenerate Codes",
|
"Regenerate Codes": "Regenerate Codes",
|
||||||
@@ -465,6 +469,7 @@
|
|||||||
"Two-Factor Auth": "Two-Factor Auth",
|
"Two-Factor Auth": "Two-Factor Auth",
|
||||||
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
||||||
|
"Two-Factor Authentication Settings": "Two-Factor Authentication Settings",
|
||||||
"Typ": "Type",
|
"Typ": "Type",
|
||||||
"Uhr": "uur",
|
"Uhr": "uur",
|
||||||
"Uhrzeit": "Tijd",
|
"Uhrzeit": "Tijd",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "Anonimowy",
|
"Anonymous": "Anonimowy",
|
||||||
"App": "Aplikacja",
|
"App": "Aplikacja",
|
||||||
"Appearance": "Wygląd",
|
"Appearance": "Wygląd",
|
||||||
|
"Appearance Settings": "Appearance Settings",
|
||||||
"Are you sure you want to delete your account?": "Czy na pewno chcesz usunąć swoje konto?",
|
"Are you sure you want to delete your account?": "Czy na pewno chcesz usunąć swoje konto?",
|
||||||
"Art des Services": "Rodzaj usługi",
|
"Art des Services": "Rodzaj usługi",
|
||||||
"Auf Karte sichtbar": "Widoczne na mapie",
|
"Auf Karte sichtbar": "Widoczne na mapie",
|
||||||
@@ -347,6 +348,7 @@
|
|||||||
"Pagination Navigation": "Nawigacja Stron",
|
"Pagination Navigation": "Nawigacja Stron",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Dostosuj wygląd swojego profilu Bitcoin Meetup.",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Dostosuj wygląd swojego profilu Bitcoin Meetup.",
|
||||||
"Password": "Hasło",
|
"Password": "Hasło",
|
||||||
|
"Password Settings": "Password Settings",
|
||||||
"Passwort ändern - Bitcoin Meetups": "Zmień hasło - Bitcoin Meetupy",
|
"Passwort ändern - Bitcoin Meetups": "Zmień hasło - Bitcoin Meetupy",
|
||||||
"Payment Required": "Płatność Wymagana",
|
"Payment Required": "Płatność Wymagana",
|
||||||
"PayNym": "PayNym",
|
"PayNym": "PayNym",
|
||||||
@@ -362,7 +364,9 @@
|
|||||||
"Population Date": "Data populacji",
|
"Population Date": "Data populacji",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "Edytuj profil - Bitcoin Meetupy",
|
"Profil bearbeiten - Bitcoin Meetups": "Edytuj profil - Bitcoin Meetupy",
|
||||||
"Profile": "Profil",
|
"Profile": "Profil",
|
||||||
|
"Profile Settings": "Profile Settings",
|
||||||
"Recovery Code": "Recovery Code",
|
"Recovery Code": "Recovery Code",
|
||||||
|
"Recovery codes": "Recovery codes",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
||||||
"Regards,": "Z poważaniem,",
|
"Regards,": "Z poważaniem,",
|
||||||
"Regenerate Codes": "Regenerate Codes",
|
"Regenerate Codes": "Regenerate Codes",
|
||||||
@@ -462,6 +466,7 @@
|
|||||||
"Two-Factor Auth": "Two-Factor Auth",
|
"Two-Factor Auth": "Two-Factor Auth",
|
||||||
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
||||||
|
"Two-Factor Authentication Settings": "Two-Factor Authentication Settings",
|
||||||
"Typ": "Typ",
|
"Typ": "Typ",
|
||||||
"Uhr": "godz.",
|
"Uhr": "godz.",
|
||||||
"Uhrzeit": "Godzina",
|
"Uhrzeit": "Godzina",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"Anonymous": "Anônimo",
|
"Anonymous": "Anônimo",
|
||||||
"App": "App",
|
"App": "App",
|
||||||
"Appearance": "Appearance",
|
"Appearance": "Appearance",
|
||||||
|
"Appearance Settings": "Appearance Settings",
|
||||||
"Are you sure you want to delete your account?": "Tem certeza de que deseja excluir sua conta?",
|
"Are you sure you want to delete your account?": "Tem certeza de que deseja excluir sua conta?",
|
||||||
"Art des Services": "Tipo de serviço",
|
"Art des Services": "Tipo de serviço",
|
||||||
"Auf Karte sichtbar": "Visível no mapa",
|
"Auf Karte sichtbar": "Visível no mapa",
|
||||||
@@ -347,6 +348,7 @@
|
|||||||
"Pagination Navigation": "Navegação em resultados paginados",
|
"Pagination Navigation": "Navegação em resultados paginados",
|
||||||
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Personalize a aparência do seu perfil de Bitcoin Meetup.",
|
"Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Personalize a aparência do seu perfil de Bitcoin Meetup.",
|
||||||
"Password": "Palavra-passe",
|
"Password": "Palavra-passe",
|
||||||
|
"Password Settings": "Password Settings",
|
||||||
"Passwort ändern - Bitcoin Meetups": "Alterar senha - Bitcoin Meetups",
|
"Passwort ändern - Bitcoin Meetups": "Alterar senha - Bitcoin Meetups",
|
||||||
"Payment Required": "Pagamento Requerido",
|
"Payment Required": "Pagamento Requerido",
|
||||||
"PayNym": "PayNym",
|
"PayNym": "PayNym",
|
||||||
@@ -362,7 +364,9 @@
|
|||||||
"Population Date": "Data da população",
|
"Population Date": "Data da população",
|
||||||
"Profil bearbeiten - Bitcoin Meetups": "Editar perfil - Bitcoin Meetups",
|
"Profil bearbeiten - Bitcoin Meetups": "Editar perfil - Bitcoin Meetups",
|
||||||
"Profile": "Perfil",
|
"Profile": "Perfil",
|
||||||
|
"Profile Settings": "Profile Settings",
|
||||||
"Recovery Code": "Recovery Code",
|
"Recovery Code": "Recovery Code",
|
||||||
|
"Recovery codes": "Recovery codes",
|
||||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
||||||
"Regards,": "Atenciosamente,",
|
"Regards,": "Atenciosamente,",
|
||||||
"Regenerate Codes": "Regenerate Codes",
|
"Regenerate Codes": "Regenerate Codes",
|
||||||
@@ -463,6 +467,7 @@
|
|||||||
"Two-Factor Auth": "Two-Factor Auth",
|
"Two-Factor Auth": "Two-Factor Auth",
|
||||||
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
"Two-Factor Authentication Enabled": "Two-Factor Authentication Enabled",
|
||||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
||||||
|
"Two-Factor Authentication Settings": "Two-Factor Authentication Settings",
|
||||||
"Typ": "Tipo",
|
"Typ": "Tipo",
|
||||||
"Uhr": "horas",
|
"Uhr": "horas",
|
||||||
"Uhrzeit": "Hora",
|
"Uhrzeit": "Hora",
|
||||||
|
|||||||
14
opencode.json
Normal file
14
opencode.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://opencode.ai/config.json",
|
||||||
|
"mcp": {
|
||||||
|
"laravel-boost": {
|
||||||
|
"type": "local",
|
||||||
|
"enabled": true,
|
||||||
|
"command": [
|
||||||
|
"vendor/bin/sail",
|
||||||
|
"artisan",
|
||||||
|
"boost:mcp"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
610
yarn.lock
610
yarn.lock
@@ -2,18 +2,18 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@emnapi/core@^1.5.0", "@emnapi/core@^1.6.0":
|
"@emnapi/core@^1.7.1":
|
||||||
version "1.7.1"
|
version "1.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.7.1.tgz#3a79a02dbc84f45884a1806ebb98e5746bdfaac4"
|
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.8.1.tgz#fd9efe721a616288345ffee17a1f26ac5dd01349"
|
||||||
integrity sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==
|
integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@emnapi/wasi-threads" "1.1.0"
|
"@emnapi/wasi-threads" "1.1.0"
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@emnapi/runtime@^1.5.0", "@emnapi/runtime@^1.6.0":
|
"@emnapi/runtime@^1.7.1":
|
||||||
version "1.7.1"
|
version "1.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.1.tgz#a73784e23f5d57287369c808197288b52276b791"
|
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5"
|
||||||
integrity sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==
|
integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
@@ -188,13 +188,13 @@
|
|||||||
"@jridgewell/resolve-uri" "^3.1.0"
|
"@jridgewell/resolve-uri" "^3.1.0"
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||||
|
|
||||||
"@napi-rs/wasm-runtime@^1.0.7":
|
"@napi-rs/wasm-runtime@^1.1.0":
|
||||||
version "1.0.7"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz#dcfea99a75f06209a235f3d941e3460a51e9b14c"
|
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2"
|
||||||
integrity sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==
|
integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@emnapi/core" "^1.5.0"
|
"@emnapi/core" "^1.7.1"
|
||||||
"@emnapi/runtime" "^1.5.0"
|
"@emnapi/runtime" "^1.7.1"
|
||||||
"@tybys/wasm-util" "^0.10.1"
|
"@tybys/wasm-util" "^0.10.1"
|
||||||
|
|
||||||
"@noble/ciphers@^0.5.1":
|
"@noble/ciphers@^0.5.1":
|
||||||
@@ -231,120 +231,135 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
|
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
|
||||||
integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
|
integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
|
||||||
|
|
||||||
"@rollup/rollup-android-arm-eabi@4.53.3":
|
"@rollup/rollup-android-arm-eabi@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz#7e478b66180c5330429dd161bf84dad66b59c8eb"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28"
|
||||||
integrity sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==
|
integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==
|
||||||
|
|
||||||
"@rollup/rollup-android-arm64@4.53.3":
|
"@rollup/rollup-android-arm64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz#2b025510c53a5e3962d3edade91fba9368c9d71c"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93"
|
||||||
integrity sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==
|
integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==
|
||||||
|
|
||||||
"@rollup/rollup-darwin-arm64@4.53.3":
|
"@rollup/rollup-darwin-arm64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz#3577c38af68ccf34c03e84f476bfd526abca10a0"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4"
|
||||||
integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==
|
integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==
|
||||||
|
|
||||||
"@rollup/rollup-darwin-x64@4.53.3":
|
"@rollup/rollup-darwin-x64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz#2bf5f2520a1f3b551723d274b9669ba5b75ed69c"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0"
|
||||||
integrity sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==
|
integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-arm64@4.53.3":
|
"@rollup/rollup-freebsd-arm64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz#4bb9cc80252564c158efc0710153c71633f1927c"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8"
|
||||||
integrity sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==
|
integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-x64@4.53.3":
|
"@rollup/rollup-freebsd-x64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz#2301289094d49415a380cf942219ae9d8b127440"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9"
|
||||||
integrity sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==
|
integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf@4.53.3":
|
"@rollup/rollup-linux-arm-gnueabihf@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz#1d03d776f2065e09fc141df7d143476e94acca88"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6"
|
||||||
integrity sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==
|
integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf@4.53.3":
|
"@rollup/rollup-linux-arm-musleabihf@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz#8623de0e040b2fd52a541c602688228f51f96701"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040"
|
||||||
integrity sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==
|
integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-gnu@4.53.3":
|
"@rollup/rollup-linux-arm64-gnu@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz#ce2d1999bc166277935dde0301cde3dd0417fb6e"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b"
|
||||||
integrity sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==
|
integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-musl@4.53.3":
|
"@rollup/rollup-linux-arm64-musl@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz#88c2523778444da952651a2219026416564a4899"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0"
|
||||||
integrity sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==
|
integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==
|
||||||
|
|
||||||
"@rollup/rollup-linux-loong64-gnu@4.53.3":
|
"@rollup/rollup-linux-loong64-gnu@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz#578ca2220a200ac4226c536c10c8cc6e4f276714"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0"
|
||||||
integrity sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==
|
integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==
|
||||||
|
|
||||||
"@rollup/rollup-linux-ppc64-gnu@4.53.3":
|
"@rollup/rollup-linux-loong64-musl@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz#aa338d3effd4168a20a5023834a74ba2c3081293"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1"
|
||||||
integrity sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==
|
integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu@4.53.3":
|
"@rollup/rollup-linux-ppc64-gnu@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz#16ba582f9f6cff58119aa242782209b1557a1508"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539"
|
||||||
integrity sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==
|
integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-musl@4.53.3":
|
"@rollup/rollup-linux-ppc64-musl@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz#e404a77ebd6378483888b8064c703adb011340ab"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94"
|
||||||
integrity sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==
|
integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==
|
||||||
|
|
||||||
"@rollup/rollup-linux-s390x-gnu@4.53.3":
|
"@rollup/rollup-linux-riscv64-gnu@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz#92ad52d306227c56bec43d96ad2164495437ffe6"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0"
|
||||||
integrity sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==
|
integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu@4.53.3":
|
"@rollup/rollup-linux-riscv64-musl@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4"
|
||||||
integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==
|
integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-s390x-gnu@4.55.1":
|
||||||
|
version "4.55.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2"
|
||||||
|
integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-x64-gnu@4.55.1":
|
||||||
|
version "4.55.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb"
|
||||||
|
integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu@4.9.5":
|
"@rollup/rollup-linux-x64-gnu@4.9.5":
|
||||||
version "4.9.5"
|
version "4.9.5"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz#85946ee4d068bd12197aeeec2c6f679c94978a49"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz#85946ee4d068bd12197aeeec2c6f679c94978a49"
|
||||||
integrity sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==
|
integrity sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-musl@4.53.3":
|
"@rollup/rollup-linux-x64-musl@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz#37a3efb09f18d555f8afc490e1f0444885de8951"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31"
|
||||||
integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==
|
integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==
|
||||||
|
|
||||||
"@rollup/rollup-openharmony-arm64@4.53.3":
|
"@rollup/rollup-openbsd-x64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz#c489bec9f4f8320d42c9b324cca220c90091c1f7"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d"
|
||||||
integrity sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==
|
integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==
|
||||||
|
|
||||||
"@rollup/rollup-win32-arm64-msvc@4.53.3":
|
"@rollup/rollup-openharmony-arm64@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz#152832b5f79dc22d1606fac3db946283601b7080"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77"
|
||||||
integrity sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==
|
integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==
|
||||||
|
|
||||||
"@rollup/rollup-win32-ia32-msvc@4.53.3":
|
"@rollup/rollup-win32-arm64-msvc@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz#54d91b2bb3bf3e9f30d32b72065a4e52b3a172a5"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a"
|
||||||
integrity sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==
|
integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-gnu@4.53.3":
|
"@rollup/rollup-win32-ia32-msvc@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz#df9df03e61a003873efec8decd2034e7f135c71e"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf"
|
||||||
integrity sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==
|
integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-msvc@4.53.3":
|
"@rollup/rollup-win32-x64-gnu@4.55.1":
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz#38ae84f4c04226c1d56a3b17296ef1e0460ecdfe"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88"
|
||||||
integrity sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==
|
integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==
|
||||||
|
|
||||||
|
"@rollup/rollup-win32-x64-msvc@4.55.1":
|
||||||
|
version "4.55.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b"
|
||||||
|
integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==
|
||||||
|
|
||||||
"@scure/base@1.1.1":
|
"@scure/base@1.1.1":
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
@@ -373,51 +388,51 @@
|
|||||||
"@noble/hashes" "~1.3.0"
|
"@noble/hashes" "~1.3.0"
|
||||||
"@scure/base" "~1.1.0"
|
"@scure/base" "~1.1.0"
|
||||||
|
|
||||||
"@shikijs/core@3.15.0":
|
"@shikijs/core@3.21.0":
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-3.15.0.tgz#eee251070b4e39b59e108266cbcd50c85d738d54"
|
resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-3.21.0.tgz#9641d09865c43612b28e7931f9af68c8a62edd90"
|
||||||
integrity sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==
|
integrity sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/types" "3.15.0"
|
"@shikijs/types" "3.21.0"
|
||||||
"@shikijs/vscode-textmate" "^10.0.2"
|
"@shikijs/vscode-textmate" "^10.0.2"
|
||||||
"@types/hast" "^3.0.4"
|
"@types/hast" "^3.0.4"
|
||||||
hast-util-to-html "^9.0.5"
|
hast-util-to-html "^9.0.5"
|
||||||
|
|
||||||
"@shikijs/engine-javascript@3.15.0":
|
"@shikijs/engine-javascript@3.21.0":
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-3.15.0.tgz#478dd4feb3b4b7e91f148cc9e7ebc0b7de5fbb18"
|
resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz#f04554fe87bed39d00ba4b140894b41cd207f5cb"
|
||||||
integrity sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==
|
integrity sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/types" "3.15.0"
|
"@shikijs/types" "3.21.0"
|
||||||
"@shikijs/vscode-textmate" "^10.0.2"
|
"@shikijs/vscode-textmate" "^10.0.2"
|
||||||
oniguruma-to-es "^4.3.3"
|
oniguruma-to-es "^4.3.4"
|
||||||
|
|
||||||
"@shikijs/engine-oniguruma@3.15.0":
|
"@shikijs/engine-oniguruma@3.21.0":
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.15.0.tgz#bc5fe6484d64b2daacdfbb248f06732fbc78c8e2"
|
resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz#0e666454a03fd85d6c634d9dbe70a63f007a6323"
|
||||||
integrity sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==
|
integrity sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/types" "3.15.0"
|
"@shikijs/types" "3.21.0"
|
||||||
"@shikijs/vscode-textmate" "^10.0.2"
|
"@shikijs/vscode-textmate" "^10.0.2"
|
||||||
|
|
||||||
"@shikijs/langs@3.15.0":
|
"@shikijs/langs@3.21.0":
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.15.0.tgz#d8385a9ca66ce9923149c650336444b1d25fc248"
|
resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.21.0.tgz#da33400a85c7cba75fc9f4a6b9feb69a6c39c800"
|
||||||
integrity sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==
|
integrity sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/types" "3.15.0"
|
"@shikijs/types" "3.21.0"
|
||||||
|
|
||||||
"@shikijs/themes@3.15.0":
|
"@shikijs/themes@3.21.0":
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.15.0.tgz#6093a90191b89654045c72636ddd35c04273658f"
|
resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.21.0.tgz#1955d642ea37d70d1137e6cf47da7dc9c34ff4c0"
|
||||||
integrity sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==
|
integrity sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/types" "3.15.0"
|
"@shikijs/types" "3.21.0"
|
||||||
|
|
||||||
"@shikijs/types@3.15.0":
|
"@shikijs/types@3.21.0":
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.15.0.tgz#4e025b4dea98e1603243b1f00677854e07e5eda1"
|
resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.21.0.tgz#510d6ddbea65add27980a6ca36cc7bdabc7afe90"
|
||||||
integrity sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==
|
integrity sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/vscode-textmate" "^10.0.2"
|
"@shikijs/vscode-textmate" "^10.0.2"
|
||||||
"@types/hast" "^3.0.4"
|
"@types/hast" "^3.0.4"
|
||||||
@@ -427,10 +442,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224"
|
resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224"
|
||||||
integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==
|
integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==
|
||||||
|
|
||||||
"@tailwindcss/node@4.1.17":
|
"@tailwindcss/node@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.17.tgz#ec40a37293246f4eeab2dac00e4425af9272f600"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.18.tgz#9863be0d26178638794a38d6c7c14666fb992e8a"
|
||||||
integrity sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==
|
integrity sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jridgewell/remapping" "^2.3.4"
|
"@jridgewell/remapping" "^2.3.4"
|
||||||
enhanced-resolve "^5.18.3"
|
enhanced-resolve "^5.18.3"
|
||||||
@@ -438,101 +453,101 @@
|
|||||||
lightningcss "1.30.2"
|
lightningcss "1.30.2"
|
||||||
magic-string "^0.30.21"
|
magic-string "^0.30.21"
|
||||||
source-map-js "^1.2.1"
|
source-map-js "^1.2.1"
|
||||||
tailwindcss "4.1.17"
|
tailwindcss "4.1.18"
|
||||||
|
|
||||||
"@tailwindcss/oxide-android-arm64@4.1.17":
|
"@tailwindcss/oxide-android-arm64@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz#17f0dc901f88a979c5bff618181bce596dff596d"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz#79717f87e90135e5d3d23a3d3aecde4ca5595dd5"
|
||||||
integrity sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==
|
integrity sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==
|
||||||
|
|
||||||
"@tailwindcss/oxide-darwin-arm64@4.1.17":
|
"@tailwindcss/oxide-darwin-arm64@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.17.tgz#63e12e62b83f6949dbb10b5a7f6e441606835efc"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz#7fa47608d62d60e9eb020682249d20159667fbb0"
|
||||||
integrity sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==
|
integrity sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==
|
||||||
|
|
||||||
"@tailwindcss/oxide-darwin-x64@4.1.17":
|
"@tailwindcss/oxide-darwin-x64@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.17.tgz#6dad270d2777508f55e2b73eca0eaef625bc45a7"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz#c05991c85aa2af47bf9d1f8172fe9e4636591e79"
|
||||||
integrity sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==
|
integrity sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==
|
||||||
|
|
||||||
"@tailwindcss/oxide-freebsd-x64@4.1.17":
|
"@tailwindcss/oxide-freebsd-x64@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.17.tgz#e7628b4602ac7d73c11a9922ecb83c24337eff55"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz#3d48e8d79fd08ece0e02af8e72d5059646be34d0"
|
||||||
integrity sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==
|
integrity sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17":
|
"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.17.tgz#4d96a6fe4c7ed20e7a013101ee46f46caca2233e"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz#982ecd1a65180807ccfde67dc17c6897f2e50aa8"
|
||||||
integrity sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==
|
integrity sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-arm64-gnu@4.1.17":
|
"@tailwindcss/oxide-linux-arm64-gnu@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.17.tgz#adc3c01cd73610870bfc21db5713571e08fb2210"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz#df49357bc9737b2e9810ea950c1c0647ba6573c3"
|
||||||
integrity sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==
|
integrity sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-arm64-musl@4.1.17":
|
"@tailwindcss/oxide-linux-arm64-musl@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.17.tgz#39ceda30407af56a1ee125b2c5ce856c6d29250f"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz#b266c12822bf87883cf152615f8fffb8519d689c"
|
||||||
integrity sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==
|
integrity sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-x64-gnu@4.1.17", "@tailwindcss/oxide-linux-x64-gnu@^4.0.1":
|
"@tailwindcss/oxide-linux-x64-gnu@4.1.18", "@tailwindcss/oxide-linux-x64-gnu@^4.0.1":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.17.tgz#a3d4bd876c04d09856af0c394f5095fbc8a2b14c"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz#5c737f13dd9529b25b314e6000ff54e05b3811da"
|
||||||
integrity sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==
|
integrity sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-x64-musl@4.1.17":
|
"@tailwindcss/oxide-linux-x64-musl@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.17.tgz#bdc20aa4fb2d28cc928f2cfffff7a9cd03a51d5b"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz#3380e17f7be391f1ef924be9f0afe1f304fe3478"
|
||||||
integrity sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==
|
integrity sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==
|
||||||
|
|
||||||
"@tailwindcss/oxide-wasm32-wasi@4.1.17":
|
"@tailwindcss/oxide-wasm32-wasi@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.17.tgz#7c0804748935928751838f86ff4f879c38f8a6d7"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz#9464df0e28a499aab1c55e97682be37b3a656c88"
|
||||||
integrity sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==
|
integrity sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@emnapi/core" "^1.6.0"
|
"@emnapi/core" "^1.7.1"
|
||||||
"@emnapi/runtime" "^1.6.0"
|
"@emnapi/runtime" "^1.7.1"
|
||||||
"@emnapi/wasi-threads" "^1.1.0"
|
"@emnapi/wasi-threads" "^1.1.0"
|
||||||
"@napi-rs/wasm-runtime" "^1.0.7"
|
"@napi-rs/wasm-runtime" "^1.1.0"
|
||||||
"@tybys/wasm-util" "^0.10.1"
|
"@tybys/wasm-util" "^0.10.1"
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@tailwindcss/oxide-win32-arm64-msvc@4.1.17":
|
"@tailwindcss/oxide-win32-arm64-msvc@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz#7222fc2ceee9d45ebe5aebf38707ee9833a20475"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz#bbcdd59c628811f6a0a4d5b09616967d8fb0c4d4"
|
||||||
integrity sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==
|
integrity sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==
|
||||||
|
|
||||||
"@tailwindcss/oxide-win32-x64-msvc@4.1.17":
|
"@tailwindcss/oxide-win32-x64-msvc@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.17.tgz#ac79087f451dfcd5c3099589027a5732b045a3bf"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz#9c628d04623aa4c3536c508289f58d58ba4b3fb1"
|
||||||
integrity sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==
|
integrity sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==
|
||||||
|
|
||||||
"@tailwindcss/oxide@4.1.17":
|
"@tailwindcss/oxide@4.1.18":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.17.tgz#6c063b40a022f4fbdac557c0586cfb9ae08a3dfe"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.18.tgz#c8335cd0a83e9880caecd60abf7904f43ebab582"
|
||||||
integrity sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==
|
integrity sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@tailwindcss/oxide-android-arm64" "4.1.17"
|
"@tailwindcss/oxide-android-arm64" "4.1.18"
|
||||||
"@tailwindcss/oxide-darwin-arm64" "4.1.17"
|
"@tailwindcss/oxide-darwin-arm64" "4.1.18"
|
||||||
"@tailwindcss/oxide-darwin-x64" "4.1.17"
|
"@tailwindcss/oxide-darwin-x64" "4.1.18"
|
||||||
"@tailwindcss/oxide-freebsd-x64" "4.1.17"
|
"@tailwindcss/oxide-freebsd-x64" "4.1.18"
|
||||||
"@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.17"
|
"@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.18"
|
||||||
"@tailwindcss/oxide-linux-arm64-gnu" "4.1.17"
|
"@tailwindcss/oxide-linux-arm64-gnu" "4.1.18"
|
||||||
"@tailwindcss/oxide-linux-arm64-musl" "4.1.17"
|
"@tailwindcss/oxide-linux-arm64-musl" "4.1.18"
|
||||||
"@tailwindcss/oxide-linux-x64-gnu" "4.1.17"
|
"@tailwindcss/oxide-linux-x64-gnu" "4.1.18"
|
||||||
"@tailwindcss/oxide-linux-x64-musl" "4.1.17"
|
"@tailwindcss/oxide-linux-x64-musl" "4.1.18"
|
||||||
"@tailwindcss/oxide-wasm32-wasi" "4.1.17"
|
"@tailwindcss/oxide-wasm32-wasi" "4.1.18"
|
||||||
"@tailwindcss/oxide-win32-arm64-msvc" "4.1.17"
|
"@tailwindcss/oxide-win32-arm64-msvc" "4.1.18"
|
||||||
"@tailwindcss/oxide-win32-x64-msvc" "4.1.17"
|
"@tailwindcss/oxide-win32-x64-msvc" "4.1.18"
|
||||||
|
|
||||||
"@tailwindcss/vite@^4.0.7":
|
"@tailwindcss/vite@^4.0.7":
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/vite/-/vite-4.1.17.tgz#c316b3817b21e175c37261249550790b1b909f93"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/vite/-/vite-4.1.18.tgz#614b9d5483559518c72d31bca05d686f8df28e9a"
|
||||||
integrity sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==
|
integrity sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@tailwindcss/node" "4.1.17"
|
"@tailwindcss/node" "4.1.18"
|
||||||
"@tailwindcss/oxide" "4.1.17"
|
"@tailwindcss/oxide" "4.1.18"
|
||||||
tailwindcss "4.1.17"
|
tailwindcss "4.1.18"
|
||||||
|
|
||||||
"@tybys/wasm-util@^0.10.1":
|
"@tybys/wasm-util@^0.10.1":
|
||||||
version "0.10.1"
|
version "0.10.1"
|
||||||
@@ -588,14 +603,13 @@ asynckit@^0.4.0:
|
|||||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
autoprefixer@^10.4.20:
|
autoprefixer@^10.4.20:
|
||||||
version "10.4.22"
|
version "10.4.23"
|
||||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.22.tgz#90b27ab55ec0cf0684210d1f056f7d65dac55f16"
|
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.23.tgz#c6aa6db8e7376fcd900f9fd79d143ceebad8c4e6"
|
||||||
integrity sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==
|
integrity sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist "^4.27.0"
|
browserslist "^4.28.1"
|
||||||
caniuse-lite "^1.0.30001754"
|
caniuse-lite "^1.0.30001760"
|
||||||
fraction.js "^5.3.4"
|
fraction.js "^5.3.4"
|
||||||
normalize-range "^0.1.2"
|
|
||||||
picocolors "^1.1.1"
|
picocolors "^1.1.1"
|
||||||
postcss-value-parser "^4.2.0"
|
postcss-value-parser "^4.2.0"
|
||||||
|
|
||||||
@@ -608,21 +622,21 @@ axios@^1.7.4:
|
|||||||
form-data "^4.0.4"
|
form-data "^4.0.4"
|
||||||
proxy-from-env "^1.1.0"
|
proxy-from-env "^1.1.0"
|
||||||
|
|
||||||
baseline-browser-mapping@^2.8.25:
|
baseline-browser-mapping@^2.9.0:
|
||||||
version "2.8.30"
|
version "2.9.15"
|
||||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz#5c7420acc2fd20f3db820a40c6521590a671d137"
|
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz#6baaa0069883f50a99cdb31b56646491f47c05d7"
|
||||||
integrity sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==
|
integrity sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==
|
||||||
|
|
||||||
browserslist@^4.27.0:
|
browserslist@^4.28.1:
|
||||||
version "4.28.0"
|
version "4.28.1"
|
||||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929"
|
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95"
|
||||||
integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==
|
integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==
|
||||||
dependencies:
|
dependencies:
|
||||||
baseline-browser-mapping "^2.8.25"
|
baseline-browser-mapping "^2.9.0"
|
||||||
caniuse-lite "^1.0.30001754"
|
caniuse-lite "^1.0.30001759"
|
||||||
electron-to-chromium "^1.5.249"
|
electron-to-chromium "^1.5.263"
|
||||||
node-releases "^2.0.27"
|
node-releases "^2.0.27"
|
||||||
update-browserslist-db "^1.1.4"
|
update-browserslist-db "^1.2.0"
|
||||||
|
|
||||||
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -632,10 +646,10 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
|||||||
es-errors "^1.3.0"
|
es-errors "^1.3.0"
|
||||||
function-bind "^1.1.2"
|
function-bind "^1.1.2"
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001754:
|
caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760:
|
||||||
version "1.0.30001756"
|
version "1.0.30001764"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz#fe80104631102f88e58cad8aa203a2c3e5ec9ebd"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz#03206c56469f236103b90f9ae10bcb8b9e1f6005"
|
||||||
integrity sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==
|
integrity sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==
|
||||||
|
|
||||||
ccount@^2.0.0:
|
ccount@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
@@ -736,10 +750,10 @@ dunder-proto@^1.0.1:
|
|||||||
es-errors "^1.3.0"
|
es-errors "^1.3.0"
|
||||||
gopd "^1.2.0"
|
gopd "^1.2.0"
|
||||||
|
|
||||||
electron-to-chromium@^1.5.249:
|
electron-to-chromium@^1.5.263:
|
||||||
version "1.5.259"
|
version "1.5.267"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz#d4393167ec14c5a046cebaec3ddf3377944ce965"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7"
|
||||||
integrity sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==
|
integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==
|
||||||
|
|
||||||
emoji-regex@^8.0.0:
|
emoji-regex@^8.0.0:
|
||||||
version "8.0.0"
|
version "8.0.0"
|
||||||
@@ -747,9 +761,9 @@ emoji-regex@^8.0.0:
|
|||||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||||
|
|
||||||
enhanced-resolve@^5.18.3:
|
enhanced-resolve@^5.18.3:
|
||||||
version "5.18.3"
|
version "5.18.4"
|
||||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44"
|
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828"
|
||||||
integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==
|
integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs "^4.2.4"
|
graceful-fs "^4.2.4"
|
||||||
tapable "^2.2.0"
|
tapable "^2.2.0"
|
||||||
@@ -1056,9 +1070,9 @@ math-intrinsics@^1.1.0:
|
|||||||
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
|
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
|
||||||
|
|
||||||
mdast-util-to-hast@^13.0.0:
|
mdast-util-to-hast@^13.0.0:
|
||||||
version "13.2.0"
|
version "13.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4"
|
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053"
|
||||||
integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==
|
integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/hast" "^3.0.0"
|
"@types/hast" "^3.0.0"
|
||||||
"@types/mdast" "^4.0.0"
|
"@types/mdast" "^4.0.0"
|
||||||
@@ -1124,15 +1138,10 @@ node-releases@^2.0.27:
|
|||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
|
||||||
integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
|
integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
|
||||||
|
|
||||||
normalize-range@^0.1.2:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
|
|
||||||
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
|
|
||||||
|
|
||||||
nostr-tools@^2.17.4:
|
nostr-tools@^2.17.4:
|
||||||
version "2.17.4"
|
version "2.19.4"
|
||||||
resolved "https://registry.yarnpkg.com/nostr-tools/-/nostr-tools-2.17.4.tgz#c4d70e0df6f7374a001444a627313645f3c965d7"
|
resolved "https://registry.yarnpkg.com/nostr-tools/-/nostr-tools-2.19.4.tgz#c4e2b56914db7f3b91e5fbef250e7ce65754ed74"
|
||||||
integrity sha512-LGqpKufnmR93tOjFi4JZv1BTTVIAVfZAaAa+1gMqVfI0wNz2DnCB6UDXmjVTRrjQHMw2ykbk0EZLPzV5UeCIJw==
|
integrity sha512-qVLfoTpZegNYRJo5j+Oi6RPu0AwLP6jcvzcB3ySMnIT5DrAGNXfs5HNBspB/2HiGfH3GY+v6yXkTtcKSBQZwSg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@noble/ciphers" "^0.5.1"
|
"@noble/ciphers" "^0.5.1"
|
||||||
"@noble/curves" "1.2.0"
|
"@noble/curves" "1.2.0"
|
||||||
@@ -1152,10 +1161,10 @@ oniguruma-parser@^0.12.1:
|
|||||||
resolved "https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz#82ba2208d7a2b69ee344b7efe0ae930c627dcc4a"
|
resolved "https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz#82ba2208d7a2b69ee344b7efe0ae930c627dcc4a"
|
||||||
integrity sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==
|
integrity sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==
|
||||||
|
|
||||||
oniguruma-to-es@^4.3.3:
|
oniguruma-to-es@^4.3.4:
|
||||||
version "4.3.3"
|
version "4.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz#50db2c1e28ec365e102c1863dfd3d1d1ad18613e"
|
resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz#0b909d960faeb84511c979b1f2af64e9bc37ce34"
|
||||||
integrity sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==
|
integrity sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==
|
||||||
dependencies:
|
dependencies:
|
||||||
oniguruma-parser "^0.12.1"
|
oniguruma-parser "^0.12.1"
|
||||||
regex "^6.0.1"
|
regex "^6.0.1"
|
||||||
@@ -1213,9 +1222,9 @@ regex-utilities@^2.3.0:
|
|||||||
integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==
|
integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==
|
||||||
|
|
||||||
regex@^6.0.1:
|
regex@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/regex/-/regex-6.0.1.tgz#282fa4435d0c700b09c0eb0982b602e05ab6a34f"
|
resolved "https://registry.yarnpkg.com/regex/-/regex-6.1.0.tgz#d7ce98f8ee32da7497c13f6601fca2bc4a6a7803"
|
||||||
integrity sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==
|
integrity sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==
|
||||||
dependencies:
|
dependencies:
|
||||||
regex-utilities "^2.3.0"
|
regex-utilities "^2.3.0"
|
||||||
|
|
||||||
@@ -1225,34 +1234,37 @@ require-directory@^2.1.1:
|
|||||||
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
|
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
|
||||||
|
|
||||||
rollup@^4.34.9:
|
rollup@^4.34.9:
|
||||||
version "4.53.3"
|
version "4.55.1"
|
||||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.3.tgz#dbc8cd8743b38710019fb8297e8d7a76e3faa406"
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144"
|
||||||
integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==
|
integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/estree" "1.0.8"
|
"@types/estree" "1.0.8"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@rollup/rollup-android-arm-eabi" "4.53.3"
|
"@rollup/rollup-android-arm-eabi" "4.55.1"
|
||||||
"@rollup/rollup-android-arm64" "4.53.3"
|
"@rollup/rollup-android-arm64" "4.55.1"
|
||||||
"@rollup/rollup-darwin-arm64" "4.53.3"
|
"@rollup/rollup-darwin-arm64" "4.55.1"
|
||||||
"@rollup/rollup-darwin-x64" "4.53.3"
|
"@rollup/rollup-darwin-x64" "4.55.1"
|
||||||
"@rollup/rollup-freebsd-arm64" "4.53.3"
|
"@rollup/rollup-freebsd-arm64" "4.55.1"
|
||||||
"@rollup/rollup-freebsd-x64" "4.53.3"
|
"@rollup/rollup-freebsd-x64" "4.55.1"
|
||||||
"@rollup/rollup-linux-arm-gnueabihf" "4.53.3"
|
"@rollup/rollup-linux-arm-gnueabihf" "4.55.1"
|
||||||
"@rollup/rollup-linux-arm-musleabihf" "4.53.3"
|
"@rollup/rollup-linux-arm-musleabihf" "4.55.1"
|
||||||
"@rollup/rollup-linux-arm64-gnu" "4.53.3"
|
"@rollup/rollup-linux-arm64-gnu" "4.55.1"
|
||||||
"@rollup/rollup-linux-arm64-musl" "4.53.3"
|
"@rollup/rollup-linux-arm64-musl" "4.55.1"
|
||||||
"@rollup/rollup-linux-loong64-gnu" "4.53.3"
|
"@rollup/rollup-linux-loong64-gnu" "4.55.1"
|
||||||
"@rollup/rollup-linux-ppc64-gnu" "4.53.3"
|
"@rollup/rollup-linux-loong64-musl" "4.55.1"
|
||||||
"@rollup/rollup-linux-riscv64-gnu" "4.53.3"
|
"@rollup/rollup-linux-ppc64-gnu" "4.55.1"
|
||||||
"@rollup/rollup-linux-riscv64-musl" "4.53.3"
|
"@rollup/rollup-linux-ppc64-musl" "4.55.1"
|
||||||
"@rollup/rollup-linux-s390x-gnu" "4.53.3"
|
"@rollup/rollup-linux-riscv64-gnu" "4.55.1"
|
||||||
"@rollup/rollup-linux-x64-gnu" "4.53.3"
|
"@rollup/rollup-linux-riscv64-musl" "4.55.1"
|
||||||
"@rollup/rollup-linux-x64-musl" "4.53.3"
|
"@rollup/rollup-linux-s390x-gnu" "4.55.1"
|
||||||
"@rollup/rollup-openharmony-arm64" "4.53.3"
|
"@rollup/rollup-linux-x64-gnu" "4.55.1"
|
||||||
"@rollup/rollup-win32-arm64-msvc" "4.53.3"
|
"@rollup/rollup-linux-x64-musl" "4.55.1"
|
||||||
"@rollup/rollup-win32-ia32-msvc" "4.53.3"
|
"@rollup/rollup-openbsd-x64" "4.55.1"
|
||||||
"@rollup/rollup-win32-x64-gnu" "4.53.3"
|
"@rollup/rollup-openharmony-arm64" "4.55.1"
|
||||||
"@rollup/rollup-win32-x64-msvc" "4.53.3"
|
"@rollup/rollup-win32-arm64-msvc" "4.55.1"
|
||||||
|
"@rollup/rollup-win32-ia32-msvc" "4.55.1"
|
||||||
|
"@rollup/rollup-win32-x64-gnu" "4.55.1"
|
||||||
|
"@rollup/rollup-win32-x64-msvc" "4.55.1"
|
||||||
fsevents "~2.3.2"
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
rxjs@7.8.2:
|
rxjs@7.8.2:
|
||||||
@@ -1268,16 +1280,16 @@ shell-quote@1.8.3:
|
|||||||
integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
|
integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
|
||||||
|
|
||||||
shiki@^3.15.0:
|
shiki@^3.15.0:
|
||||||
version "3.15.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/shiki/-/shiki-3.15.0.tgz#27cb37a080f987a4ec3a0402137b72f7400b8ea4"
|
resolved "https://registry.yarnpkg.com/shiki/-/shiki-3.21.0.tgz#64686fe6bfc6b2b602d209eb6c8cdbc79d0eff22"
|
||||||
integrity sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==
|
integrity sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@shikijs/core" "3.15.0"
|
"@shikijs/core" "3.21.0"
|
||||||
"@shikijs/engine-javascript" "3.15.0"
|
"@shikijs/engine-javascript" "3.21.0"
|
||||||
"@shikijs/engine-oniguruma" "3.15.0"
|
"@shikijs/engine-oniguruma" "3.21.0"
|
||||||
"@shikijs/langs" "3.15.0"
|
"@shikijs/langs" "3.21.0"
|
||||||
"@shikijs/themes" "3.15.0"
|
"@shikijs/themes" "3.21.0"
|
||||||
"@shikijs/types" "3.15.0"
|
"@shikijs/types" "3.21.0"
|
||||||
"@shikijs/vscode-textmate" "^10.0.2"
|
"@shikijs/vscode-textmate" "^10.0.2"
|
||||||
"@types/hast" "^3.0.4"
|
"@types/hast" "^3.0.4"
|
||||||
|
|
||||||
@@ -1329,10 +1341,10 @@ supports-color@^7.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-flag "^4.0.0"
|
has-flag "^4.0.0"
|
||||||
|
|
||||||
tailwindcss@4.1.17, tailwindcss@^4.0.7:
|
tailwindcss@4.1.18, tailwindcss@^4.0.7:
|
||||||
version "4.1.17"
|
version "4.1.18"
|
||||||
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.17.tgz#e6dcb7a9c60cef7522169b5f207ffec2fd652286"
|
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.18.tgz#f488ba47853abdb5354daf9679d3e7791fc4f4e3"
|
||||||
integrity sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==
|
integrity sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==
|
||||||
|
|
||||||
tapable@^2.2.0:
|
tapable@^2.2.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
@@ -1400,10 +1412,10 @@ unist-util-visit@^5.0.0:
|
|||||||
unist-util-is "^6.0.0"
|
unist-util-is "^6.0.0"
|
||||||
unist-util-visit-parents "^6.0.0"
|
unist-util-visit-parents "^6.0.0"
|
||||||
|
|
||||||
update-browserslist-db@^1.1.4:
|
update-browserslist-db@^1.2.0:
|
||||||
version "1.1.4"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a"
|
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d"
|
||||||
integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==
|
integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==
|
||||||
dependencies:
|
dependencies:
|
||||||
escalade "^3.2.0"
|
escalade "^3.2.0"
|
||||||
picocolors "^1.1.1"
|
picocolors "^1.1.1"
|
||||||
|
|||||||
Reference in New Issue
Block a user