Compare commits

...

10 Commits

Author SHA1 Message Date
twotalesanimation abf5ced6d7 feat: show inspection actions on printing status and move to awaiting_collection on approval
- Show inspection pass/fail buttons when order status is 'printing' in ops page
- Updated getAvailableActions() to include 'printing' in inspection actions
- Changed markInspectionPassed() to accept both 'inspection' and 'printing' statuses
- Changed markInspectionPassed() to move order to 'awaiting_collection' instead of 'packing'
- Updated flagInspectionIssue() to accept both 'inspection' and 'printing' statuses
- Updated order-detail.blade.php conditional to show inspection actions for both 'inspection' and 'printing' statuses
2026-01-03 16:30:57 +02:00
twotalesanimation 2a10f9af38 feat: Complete Shiplogic integration with mobile-optimized ops workflow
**Shiplogic API Integration:**
- Fixed API base URL configuration (removed /api suffix)
- Implemented comprehensive request/response logging for rates and shipments endpoints
- Fixed PDF fetching: API returns S3 URLs, now downloads actual PDFs from S3
- Added tests and mock API responses for local development (routes/shiplogic-mock.php)

**Courier Service Enhancements:**
- Added redownloadShipmentPdfs() public method for re-downloading corrupted PDFs
- Enhanced error logging with full request/response bodies for debugging
- Proper binary PDF storage using Laravel Storage facade
- URL and S3 download handling for Shiplogic API responses

**Workflow & Operations:**
- Changed to manual "Ready for Collection" button instead of automatic move
- Operators now: scan QR → apply labels → click "Ready for Collection" → moves to Awaiting Collection
- Removed duplicate PDF attachments to Trello (was adding twice from two listeners)
- Fixed NotifySlackOnShipmentCreated to only handle Slack notifications

**Mobile-Optimized Ops Page:**
- Removed QR code display from order detail page
- Implemented responsive single-column layout for mobile phones
- Large touch-friendly buttons (full width, increased padding)
- Bold typography for better readability on small screens
- Larger input fields and tracking number displays
- Clear step-by-step instructions for warehouse operators
- Re-download PDF button for damaged/corrupted labels

**New Features:**
- POST /ops/orders/{uuid}/ready-for-collection endpoint
- Re-download PDFs functionality accessible from awaiting_collection and in_transit states
- Full audit logging for all operations via ops interface
- Proper error handling and user feedback

**Testing:**
- Added ShipmentCreationTest with mock HTTP client
- Created comprehensive testing guide (SHIPLOGIC_TESTING.md)
- Mock API routes for local development without hitting live API
2026-01-03 16:13:20 +02:00
twotalesanimation b8cc8bd421 feat: Add Google Places autocomplete for address search
- Add address search input field with autocomplete
- Integrate Google Places API to provide address suggestions
- Parse selected address components and auto-populate form fields
- Address fields initially hidden, show when address is selected
- Add clear button to reset address selection
- Support South Africa locations with country restriction
- Add Google Places API key config to services.php
- Hide/show address fields based on selection and validation errors
2026-01-03 00:15:30 +02:00
twotalesanimation dd950b5aba feat: Update checkout form to collect detailed address fields
- Replace single shipping_address textarea with individual components
- Collect: street_address, local_area, city, zone, postcode, country, type
- Update checkout validation to require all address components
- Update OrderController::process to save individual address fields
- Fields are now captured per ShipLogic API requirements
- Note: CustomOrder checkout address collection to be implemented later
2026-01-02 21:40:56 +02:00
twotalesanimation 124ab46507 refactor: Split shipping_address into component fields for ShipLogic API
- Create migration to add shipping_street_address, shipping_local_area, shipping_city, shipping_zone, shipping_country, shipping_postcode, shipping_type
- Update Order model fillable array with new address component fields
- Remove address parsing logic from CourierService
- Use individual address fields directly in ShipLogic API payload
- Fields match ShipLogic API requirements (street_address, local_area, city, zone, code, country, type)
- Note: Custom orders address collection can be implemented later
2026-01-02 21:40:16 +02:00
twotalesanimation 206ea2d35c fix: Update order status to ready_to_ship before handling intent
- Previously 'Ready to Ship' list movement was calling handler without updating status
- This caused status to remain 'packing' even after card moved to Ready to Ship
- Now status is updated to 'ready_to_ship' before attempting shipment creation
- Also added status update for Awaiting Collection list for consistency
2026-01-02 21:32:41 +02:00
twotalesanimation 027278c216 fix: Add datetime casts to Order model and null check in view
- Add casts array to Order model for packing_completed_at, delivered_at, qr_generated_at
- Update ops order-detail view to safely handle null packing_completed_at
- Prevents 'Call to a member function format() on string' error
2026-01-02 21:29:12 +02:00
twotalesanimation 22dfb12948 fix: Add height parameter to OrderPacked event
Added height to the OrderPacked event constructor and dispatch call to match
the packing form which captures width, length, height, and weight.
2026-01-02 21:25:05 +02:00
twotalesanimation 5cd8c05a7c feat: Move Trello card to Packing when inspection is passed
- Create InspectionPassed event
- Create MoveCardToPackingOnInspectionPassed listener
- Register event listener in EventServiceProvider
- Dispatch event when markInspectionPassed() is called

Now when an order passes inspection on the ops page, the Trello card
automatically moves from Inspection to Packing list.
2026-01-02 21:23:12 +02:00
twotalesanimation 341421d2a0 fix: Return available actions from getAvailableActions() method
The match statement wasn't returning the actions array, causing no actions
to display on inspection orders. Changed to directly return the match result.
2026-01-02 21:17:51 +02:00
97 changed files with 13318 additions and 234 deletions
+223
View File
@@ -0,0 +1,223 @@
# Shiplogic Integration Testing Guide
This guide explains how to test the Shiplogic API integration with mocked responses.
## Files Created
### 1. **routes/shiplogic-mock.php** - Mock API Endpoints
Routes that simulate the Shiplogic API responses for local testing without hitting the live API.
**Endpoints:**
- `POST /api/v1/mock/rates` - Returns available shipping rates/service levels
- `POST /api/v1/mock/shipments` - Returns created shipment confirmation
- `GET /api/v1/mock/shipments/label` - Returns waybill/label PDF
- `GET /api/v1/mock/shipments/label/stickers` - Returns sticker labels PDF
**To Enable:**
Add this line to `routes/web.php`:
```php
include base_path('routes/shiplogic-mock.php');
```
Then mock routes are available at `http://localhost:8000/api/v1/mock/*`
### 2. **app/Testing/ShiplogicMockClient.php** - Test Helper
PHP class for setting up HTTP mocking in tests. Uses Laravel's `Http::fake()` to intercept HTTP requests.
**Usage in Tests:**
```php
public function test_something()
{
ShiplogicMockClient::setup();
// Now all requests to shiplogic.* URLs will return mocked responses
// Run your shipment creation logic here
}
```
### 3. **tests/Feature/ShipmentCreationTest.php** - Example Tests
Two example test cases demonstrating:
- End-to-end shipment creation workflow
- ECO service level selection verification
## Test Flow
### Local Testing with Mock Routes
1. **Start Laravel server:**
```bash
php artisan serve
```
2. **Update CourierService.php** to point to mock endpoints temporarily:
```php
// In CourierService.php constructor or config
// Change: $this->baseUrl = config('services.shiplogic.api_base_url');
// To test locally: $this->baseUrl = 'http://localhost:8000/api/v1/mock';
```
3. **Trigger shipment creation** via Filament UI or directly:
```php
// Create an order
$order = Order::factory()->create([...]);
// Trigger ReadyToShipIntent event
event(new App\Events\ReadyToShipIntent($order));
```
4. **Check logs** for detailed request/response logging:
```bash
tail -f storage/logs/laravel.log
```
### Unit/Feature Testing with HTTP Mocking
1. **Run the test:**
```bash
php artisan test tests/Feature/ShipmentCreationTest.php
```
2. **Test will:**
- Mock all HTTP requests to shiplogic API
- Create test order with required fields
- Trigger shipment creation
- Assert order has shipment metadata
- Assert PDFs were stored locally
## Logging Details
The enhanced CourierService now logs at each stage:
### GET Rates Request
```
INFO: Fetching shipping rates from Shiplogic
- order_uuid: 019b8335-4b47-7087-8b93-73f6aa39ee7a
- api_url: https://api.shiplogic.com/rates
- collection_address: {...}
- delivery_address: {...}
- parcel_dimensions: {...}
```
### GET Rates Response
```
INFO: Rates API response received
- status: 200
- successful: true
OR
ERROR: Rates API error response
- status: 400 (or other error code)
- error_message: Invalid address format
- full_response: {...}
```
### CREATE Shipment Request
```
INFO: Creating Shiplogic shipment
- order_uuid: 019b8335-4b47-7087-8b93-73f6aa39ee7a
- order_number: ORDER-001
- customer: John Doe
- delivery_address: Apt 5B, 123 Main Street
- service_level: FEDEX_INTERNATIONAL_ECONOMY
- api_url: https://api.shiplogic.com/shipments
- payload: {...}
```
### CREATE Shipment Response
```
INFO: Shipment created in API
- shipment_id: 550e8400-e29b-41d4-a716-446655440002
- tracking_reference: SHP123456789
```
## Debugging "Unknown Error"
If you see `ERROR: Failed to get shipping rates {"error":"Failed to fetch rates: Unknown error"}`:
1. **Enable detailed logging** - Now included in updated CourierService
2. **Check the full API response** - Logs will now show the actual error response
3. **Common issues:**
- Invalid API key format
- Missing required address fields
- Invalid parcel dimensions
- API endpoint URL incorrect
- Network/SSL certificate issues
## Running Tests
```bash
# Run all shipment creation tests
php artisan test tests/Feature/ShipmentCreationTest.php
# Run specific test
php artisan test tests/Feature/ShipmentCreationTest.php::test_shipment_creation_with_mock_api
# Run with verbose output
php artisan test tests/Feature/ShipmentCreationTest.php -v
# Run and dump test database
php artisan test tests/Feature/ShipmentCreationTest.php --debug
```
## Mock Response Structure
All mock responses follow the actual Shiplogic API structure:
### Rates Response
```json
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"company_shipment_rates": [
{
"id": "9f67ff00-7a82-4d81-9481-4c5d8c8f1a01",
"company_code": "FEDEX",
"company_name": "FedEx",
"service_level": {
"id": "123456790",
"code": "FEDEX_INTERNATIONAL_ECONOMY",
"name": "International Economy",
"description": "Economy service (ECO)"
},
"rate": 45.75,
"currency": "GBP",
"transit_days": "5-7",
"delivery_guarantee_date": "2026-01-09"
}
]
}
```
### Shipments Response
```json
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"short_tracking_reference": "SHP123456789",
"tracking_reference": "SHP-123456789-ABC",
"customer_reference": "ORDER-12345",
"company_code": "FEDEX",
"service_level": {
"code": "FEDEX_INTERNATIONAL_ECONOMY",
"name": "International Economy"
},
"collection_min_date": "2026-01-04",
"delivery_min_date": "2026-01-09",
"status": "created",
"created_at": "2026-01-03T12:42:56.000000Z"
}
```
## Next Steps
1. ✅ Add detailed logging to CourierService
2. ✅ Create mock API routes and test helper
3. **TODO:** Test with actual order to capture real error
4. **TODO:** Fix identified Shiplogic API integration issue
5. **TODO:** Verify PDFs are being fetched and attached correctly
## Configuration Reference
Key configuration files for Shiplogic:
- `config/services.php` - API credentials and collection address
- `config/courier.php` - Courier service settings
- `.env` - Environment variables (SHIPLOGIC_API_URL, SHIPLOGIC_API_KEY, collection address details)
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Events;
use App\Models\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class InspectionFailed
{
use Dispatchable, SerializesModels;
public function __construct(
public Order $order,
public string $reason = '',
) {}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Events;
use App\Models\Order;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithBroadcasting;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class InspectionPassed
{
use Dispatchable, SerializesModels;
public function __construct(
public Order $order,
) {}
public function broadcastOn(): array
{
return [
new PrivateChannel('channel-name'),
];
}
}
@@ -0,0 +1,18 @@
<?php
namespace App\Events;
use App\Models\Order;
use App\Models\CustomOrder;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderMovedToAwaitingApproval
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public function __construct(
public Order|CustomOrder $order
) {}
}
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Events;
use App\Models\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderMovedToInspection
{
use Dispatchable, SerializesModels;
public function __construct(
public Order $order,
) {}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Events;
use App\Models\Order;
use App\Models\CustomOrder;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderMovedToPrep
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public function __construct(
public Order|CustomOrder $order
) {}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Events;
use App\Models\Order;
use App\Models\CustomOrder;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderMovedToPrinting
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public function __construct(
public Order|CustomOrder $order
) {}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Events;
use App\Models\Order;
use App\Models\CustomOrder;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderMovedToReadyForPrint
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public function __construct(
public Order|CustomOrder $order
) {}
}
+1
View File
@@ -14,6 +14,7 @@ class OrderPacked
public Order $order,
public float $width,
public float $length,
public float $height,
public float $weight,
public ?int $packedBy = null,
) {
+139 -20
View File
@@ -79,6 +79,7 @@ class OpsController extends Controller
$order->update([
'packing_width' => $validated['width'],
'packing_length' => $validated['length'],
'packing_height' => $validated['height'],
'packing_weight' => $validated['weight'],
'packing_completed_at' => now(),
'packed_by' => auth()->id(),
@@ -92,7 +93,14 @@ class OpsController extends Controller
]);
// Emit event to trigger Slack notification and Trello update
\App\Events\OrderPacked::dispatch($order);
\App\Events\OrderPacked::dispatch(
$order,
(float) $validated['width'],
(float) $validated['length'],
(float) $validated['height'],
(float) $validated['weight'],
auth()->id()
);
return response()->json([
'success' => true,
@@ -112,23 +120,23 @@ class OpsController extends Controller
*/
public function markInspectionPassed(Request $request, Order $order)
{
if ($order->status !== 'inspection') {
if (! in_array($order->status, ['inspection', 'printing'])) {
return response()->json([
'error' => 'Order is not in inspection state',
'error' => 'Order is not in inspection or printing state',
'current_status' => $order->status,
], 409);
}
// Update status and emit event
$order->update(['status' => 'packing']);
// Update status to awaiting_collection (move to inspected list in Trello)
$order->update(['status' => 'awaiting_collection']);
Log::info('Inspection passed via QR', [
'order_uuid' => $order->uuid,
'marked_by' => auth()->user()->name,
]);
// Emit event for listeners to handle Slack/Trello updates
// TODO: Create InspectionPassed event
// Emit event to trigger Slack/Trello updates
\App\Events\InspectionPassed::dispatch($order);
return response()->json([
'success' => true,
@@ -148,9 +156,9 @@ class OpsController extends Controller
'issue_description' => ['required', 'string', 'max:500'],
]);
if ($order->status !== 'inspection') {
if (! in_array($order->status, ['inspection', 'printing'])) {
return response()->json([
'error' => 'Order is not in inspection state',
'error' => 'Order is not in inspection or printing state',
'current_status' => $order->status,
], 409);
}
@@ -168,7 +176,7 @@ class OpsController extends Controller
]);
// Emit event for listeners to alert ops
// TODO: Create InspectionFailed event
\App\Events\InspectionFailed::dispatch($order, $validated['issue_description']);
return response()->json([
'success' => true,
@@ -182,23 +190,19 @@ class OpsController extends Controller
*/
private function getAvailableActions(Order $order): array
{
$actions = [];
match ($order->status) {
'inspection' => [
$actions['markInspectionPassed'] = true,
$actions['flagInspectionIssue'] = true,
return match ($order->status) {
'inspection', 'printing' => [
'markInspectionPassed' => true,
'flagInspectionIssue' => true,
],
'packing' => [
$actions['confirmPacking'] = true,
'confirmPacking' => true,
],
'ready_to_ship', 'awaiting_collection', 'in_transit' => [
$actions['readOnly'] = true,
'readOnly' => true,
],
default => []
};
return $actions;
}
/**
@@ -235,4 +239,119 @@ class OpsController extends Controller
"QR-{$order->order_number}.pdf"
);
}
/**
* Re-download shipment PDFs from Shiplogic API
*
* POST /ops/orders/{id}/redownload-pdfs
*/
public function redownloadShipmentPdfs(Order $order)
{
// Authorize
if (! auth()->user()->can('access-ops')) {
abort(403, 'Unauthorized to access ops interface');
}
// Only allow for orders with shipments
if (! $order->courier_shipment_id) {
return response()->json([
'success' => false,
'message' => 'No shipment exists for this order',
], 422);
}
try {
$courierService = new \App\Services\CourierService();
$result = $courierService->redownloadShipmentPdfs($order);
Log::info('Shipment PDFs re-downloaded via ops', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'user_id' => auth()->id(),
'user_name' => auth()->user()->name,
'success' => $result['success'],
]);
if ($result['success']) {
return response()->json([
'success' => true,
'message' => $result['message'],
'sticker_path' => $result['sticker_path'],
'waybill_path' => $result['waybill_path'],
]);
} else {
return response()->json([
'success' => false,
'message' => $result['message'],
], 500);
}
} catch (\Exception $e) {
Log::error('Failed to re-download shipment PDFs via ops', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
]);
return response()->json([
'success' => false,
'message' => 'Failed to re-download PDFs: ' . $e->getMessage(),
], 500);
}
}
/**
* Mark order as ready for collection and move Trello card
*
* POST /ops/orders/{id}/ready-for-collection
*/
public function markReadyForCollection(Order $order)
{
// Authorize
if (! auth()->user()->can('access-ops')) {
abort(403, 'Unauthorized to access ops interface');
}
// Only allow for orders with shipments in ready_to_ship status
if (! $order->courier_shipment_id || $order->status !== 'ready_to_ship') {
return response()->json([
'success' => false,
'message' => 'Order must have a shipment and be in Ready to Ship status',
], 422);
}
try {
// Update order status
$order->update([
'status' => 'awaiting_collection',
'courier_status' => 'awaiting_collection',
]);
// Move Trello card to Awaiting Collection
if ($order->trello_card_id) {
$trelloService = new \App\Services\TrelloService();
$trelloService->moveCard($order->trello_card_id, 'Awaiting Collection');
}
Log::info('Order marked ready for collection via ops', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'user_id' => auth()->id(),
'user_name' => auth()->user()->name,
]);
return response()->json([
'success' => true,
'message' => 'Order moved to Awaiting Collection',
]);
} catch (\Exception $e) {
Log::error('Failed to mark order ready for collection', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
]);
return response()->json([
'success' => false,
'message' => 'Failed to mark ready for collection: ' . $e->getMessage(),
], 500);
}
}
}
+18 -2
View File
@@ -116,7 +116,15 @@ class OrderController extends Controller
'customer_name' => 'required|string|max:255',
'customer_email' => 'required|email',
'customer_phone' => 'required|string|max:20',
'shipping_address' => 'required|string|max:500',
'shipping_street_address' => 'required|string|max:255',
'shipping_unit_number' => 'nullable|string|max:255',
'shipping_local_area' => 'required|string|max:255',
'shipping_city' => 'required|string|max:255',
'shipping_zone' => 'required|string|max:255',
'shipping_postcode' => 'required|string|max:20',
'shipping_country' => 'required|string|max:255',
'shipping_type' => 'required|in:residential,business',
'business_name' => 'nullable|string|max:255',
'notes' => 'nullable|string|max:500'
]);
@@ -219,7 +227,15 @@ class OrderController extends Controller
'customer_name' => $request->input('customer_name'),
'customer_email' => $request->input('customer_email'),
'customer_phone' => $request->input('customer_phone'),
'shipping_address' => $request->input('shipping_address'),
'shipping_street_address' => $request->input('shipping_street_address'),
'shipping_unit_number' => $request->input('shipping_unit_number'),
'shipping_local_area' => $request->input('shipping_local_area'),
'shipping_city' => $request->input('shipping_city'),
'shipping_zone' => $request->input('shipping_zone'),
'shipping_postcode' => $request->input('shipping_postcode'),
'shipping_country' => $request->input('shipping_country'),
'shipping_type' => $request->input('shipping_type'),
'business_name' => $request->input('business_name'),
];
if ($request->filled('notes')) {
@@ -47,6 +47,7 @@ class PackingController extends Controller
$order->update([
'packing_width' => $validated['width'],
'packing_length' => $validated['length'],
'packing_height' => $validated['height'],
'packing_weight' => $validated['weight'],
'packing_completed_at' => now(),
'packed_by' => Auth::id(),
@@ -3,6 +3,11 @@
namespace App\Http\Controllers;
use App\Events\ReadyToShipIntent;
use App\Events\OrderMovedToPrep;
use App\Events\OrderMovedToAwaitingApproval;
use App\Events\OrderMovedToReadyForPrint;
use App\Events\OrderMovedToPrinting;
use App\Events\OrderMovedToInspection;
use App\Models\Order;
use App\Models\CustomOrder;
use Illuminate\Http\Request;
@@ -106,15 +111,48 @@ class TrelloWebhookController extends Controller
// Handle list-specific actions
match ($listName) {
'Ready to Ship' => $this->handleReadyToShipIntent($order, $cardId),
'Awaiting Collection' => $this->handleAwaitingCollectionIntent($order, $cardId),
'In Transit' => Log::info('Card in transit', ['order_uuid' => $order->uuid]),
'Done' => Log::info('Card completed', ['order_uuid' => $order->uuid]),
'Prep/Design' => (function () use ($order) {
$order->update(['status' => 'prep']);
OrderMovedToPrep::dispatch($order);
})(),
'Awaiting Customer Approval' => (function () use ($order) {
$order->update(['status' => 'awaiting_approval']);
OrderMovedToAwaitingApproval::dispatch($order);
})(),
'Ready for Print' => (function () use ($order) {
$order->update(['status' => 'ready_for_print']);
OrderMovedToReadyForPrint::dispatch($order);
})(),
'Printing' => (function () use ($order) {
$order->update(['status' => 'printing']);
OrderMovedToPrinting::dispatch($order);
})(),
'Inspection' => (function () use ($order) {
$order->update(['status' => 'inspection']);
OrderMovedToInspection::dispatch($order);
})(),
'Packing' => $order->update(['status' => 'packing']),
'Ready to Ship' => (function () use ($order, $cardId) {
$order->update(['status' => 'ready_to_ship']);
$this->handleReadyToShipIntent($order, $cardId);
})(),
'Awaiting Collection' => (function () use ($order, $cardId) {
$order->update(['status' => 'awaiting_collection']);
$this->handleAwaitingCollectionIntent($order, $cardId);
})(),
'In Transit' => $order->update(['status' => 'in_transit']),
'Done' => $order->update(['status' => 'completed']),
default => Log::debug('Card moved to list', [
'order_uuid' => $order->uuid,
'list' => $listName,
]),
};
Log::info('Order status updated from Trello', [
'order_uuid' => $order->uuid,
'list' => $listName,
'status' => $order->status,
]);
}
/**
+55 -2
View File
@@ -4,17 +4,21 @@ namespace App\Listeners;
use App\Events\ReadyToShipIntent;
use App\Services\CourierService;
use App\Services\TrelloService;
use App\Events\ShipmentCreated;
use App\Events\ShipmentCreationFailed;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class CreateShipmentOnReadyToShip
{
/**
* Create the event listener.
*/
public function __construct(protected CourierService $courierService)
{
public function __construct(
protected CourierService $courierService,
protected TrelloService $trelloService,
) {
}
/**
@@ -31,6 +35,11 @@ class CreateShipmentOnReadyToShip
try {
$result = $this->courierService->createShipmentForOrder($order);
// Attach shipment PDFs to Trello card
if ($order->trello_card_id) {
$this->attachShipmentDocumentsToTrello($order, $result);
}
// Emit event to trigger Slack/Trello updates
ShipmentCreated::dispatch(
$order,
@@ -49,4 +58,48 @@ class CreateShipmentOnReadyToShip
ShipmentCreationFailed::dispatch($order, $e->getMessage());
}
}
/**
* Attach shipment documents (label and sticker) to the Trello card
*/
private function attachShipmentDocumentsToTrello($order, array $result): void
{
if (! $result['sticker_path'] && ! $result['waybill_path']) {
Log::warning('No shipment documents to attach', ['order_uuid' => $order->uuid]);
return;
}
try {
// Attach sticker PDF
if ($result['sticker_path'] && Storage::disk('public')->exists($result['sticker_path'])) {
$stickerUrl = asset('storage/' . $result['sticker_path']);
$this->trelloService->attachFile($order->trello_card_id, 'Shipment Sticker.pdf', $stickerUrl);
Log::info('Sticker attached to Trello card', [
'order_uuid' => $order->uuid,
'card_id' => $order->trello_card_id,
]);
}
// Attach waybill/label PDF
if ($result['waybill_path'] && Storage::disk('public')->exists($result['waybill_path'])) {
$waybillUrl = asset('storage/' . $result['waybill_path']);
$this->trelloService->attachFile($order->trello_card_id, 'Shipment Label.pdf', $waybillUrl);
Log::info('Waybill attached to Trello card', [
'order_uuid' => $order->uuid,
'card_id' => $order->trello_card_id,
]);
}
Log::info('Shipment documents attached to Trello card', [
'order_uuid' => $order->uuid,
'card_id' => $order->trello_card_id,
]);
} catch (\Exception $e) {
Log::error('Failed to attach shipment documents to Trello', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
]);
}
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Listeners;
use App\Events\InspectionPassed;
use App\Services\TrelloService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class MoveCardToPackingOnInspectionPassed implements ShouldQueue
{
use InteractsWithQueue;
public function __construct(
protected TrelloService $trello,
) {}
public function handle(InspectionPassed $event): void
{
$order = $event->order;
if (!$order->trello_card_id) {
Log::debug('No Trello card to move', ['order_uuid' => $order->uuid]);
return;
}
try {
// Move card to Packing list
$success = $this->trello->moveCard($order->trello_card_id, 'Packing');
if ($success) {
Log::info('Trello card moved to Packing', [
'order_uuid' => $order->uuid,
'card_id' => $order->trello_card_id,
]);
} else {
Log::warning('Failed to move Trello card to Packing', [
'order_uuid' => $order->uuid,
'card_id' => $order->trello_card_id,
]);
}
} catch (\Exception $e) {
Log::error('Error moving Trello card to Packing', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
]);
}
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Listeners;
use App\Events\OrderMovedToInspection;
use App\Services\SlackNotifierService;
use Illuminate\Support\Facades\Log;
class NotifySlackOnCardMovedToInspection
{
public function __construct(
protected SlackNotifierService $slack,
) {}
public function handle(OrderMovedToInspection $event): void
{
$order = $event->order;
$message = "🔍 Order Moved to Inspection\n" .
"Order: #{$order->order_number}\n" .
"Status: Ready for Quality Check";
// Notify Slack #production
$this->slack->production($message);
Log::info('Card moved to inspection notification sent to production', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
]);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Listeners;
use App\Events\InspectionFailed;
use App\Services\SlackNotifierService;
use Illuminate\Support\Facades\Log;
class NotifySlackOnInspectionFailed
{
public function __construct(
protected SlackNotifierService $slack,
) {}
public function handle(InspectionFailed $event): void
{
$order = $event->order;
$message = "⚠️ Order Inspection Failed\n" .
"Order: #{$order->order_number}\n" .
"Reason: {$event->reason}\n" .
"Status: Awaiting Review";
// Notify Slack #ops-alerts
$this->slack->opsAlerts($message);
Log::info('Inspection failed notification sent to ops-alerts', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'reason' => $event->reason,
]);
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Listeners;
use App\Events\InspectionPassed;
use App\Services\SlackNotifierService;
use Illuminate\Support\Facades\Log;
class NotifySlackOnInspectionPassed
{
public function __construct(
protected SlackNotifierService $slack,
) {}
public function handle(InspectionPassed $event): void
{
$order = $event->order;
$message = "✅ Order Inspection Passed\n" .
"Order: #{$order->order_number}\n" .
"Status: Ready for Packing";
// Notify Slack #production
$this->slack->production($message);
Log::info('Inspection passed notification sent to production', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
]);
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Listeners;
use App\Events\OrderMovedToAwaitingApproval;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
class NotifySlackOnOrderMovedToAwaitingApproval
{
public function handle(OrderMovedToAwaitingApproval $event): void
{
try {
$order = $event->order;
$webhook = config('services.slack.design_hook_url');
Log::info('Preparing Slack notification for order awaiting approval', [
'webhook_configured' => !empty($webhook),
'order_number' => $order->order_number,
]);
if (! $webhook) {
Log::warning('Slack design channel webhook not configured');
return;
}
$payload = [
'text' => 'Order Awaiting Customer Approval',
'blocks' => [
[
'type' => 'header',
'text' => [
'type' => 'plain_text',
'text' => '⏳ Order Awaiting Customer Approval',
],
],
[
'type' => 'section',
'fields' => [
[
'type' => 'mrkdwn',
'text' => "*Order Number:*\n#{$order->order_number}",
],
[
'type' => 'mrkdwn',
'text' => "*Status:*\nAwaiting Approval",
],
],
],
[
'type' => 'context',
'elements' => [
[
'type' => 'mrkdwn',
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
],
],
],
],
];
$response = Http::post($webhook, $payload);
Log::info('Slack notification sent for order awaiting approval', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'channel' => 'design',
'status_code' => $response->status(),
]);
} catch (\Throwable $e) {
Log::error('Failed to send Slack notification for order awaiting approval', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Listeners;
use App\Events\OrderMovedToPrep;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
class NotifySlackOnOrderMovedToPrep
{
public function handle(OrderMovedToPrep $event): void
{
try {
$order = $event->order;
$webhook = config('services.slack.design_hook_url');
Log::info('Preparing Slack notification for order moved to prep', [
'webhook_configured' => !empty($webhook),
'order_number' => $order->order_number,
]);
if (! $webhook) {
Log::warning('Slack design channel webhook not configured');
return;
}
$payload = [
'text' => 'Order Moved to Prep/Design',
'blocks' => [
[
'type' => 'header',
'text' => [
'type' => 'plain_text',
'text' => '📋 Order Moved to Prep/Design',
],
],
[
'type' => 'section',
'fields' => [
[
'type' => 'mrkdwn',
'text' => "*Order Number:*\n#{$order->order_number}",
],
[
'type' => 'mrkdwn',
'text' => "*Status:*\n{$order->status}",
],
],
],
[
'type' => 'context',
'elements' => [
[
'type' => 'mrkdwn',
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
],
],
],
],
];
$response = Http::post($webhook, $payload);
Log::info('Slack notification sent for order moved to prep', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'channel' => 'design',
'status_code' => $response->status(),
]);
} catch (\Throwable $e) {
Log::error('Failed to send Slack notification for order moved to prep', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Listeners;
use App\Events\OrderMovedToPrinting;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
class NotifySlackOnOrderMovedToPrinting
{
public function handle(OrderMovedToPrinting $event): void
{
try {
$order = $event->order;
$webhook = config('services.slack.production_hook_url');
Log::info('Preparing Slack notification for order printing started', [
'webhook_configured' => !empty($webhook),
'order_number' => $order->order_number,
]);
if (! $webhook) {
Log::warning('Slack production channel webhook not configured');
return;
}
$payload = [
'text' => 'Order Printing Started',
'blocks' => [
[
'type' => 'header',
'text' => [
'type' => 'plain_text',
'text' => '🖨️ Order Printing Started',
],
],
[
'type' => 'section',
'fields' => [
[
'type' => 'mrkdwn',
'text' => "*Order Number:*\n#{$order->order_number}",
],
[
'type' => 'mrkdwn',
'text' => "*Status:*\nPrinting in Progress",
],
],
],
[
'type' => 'context',
'elements' => [
[
'type' => 'mrkdwn',
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
],
],
],
],
];
$response = Http::post($webhook, $payload);
Log::info('Slack notification sent for order printing started', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'channel' => 'production',
'status_code' => $response->status(),
]);
} catch (\Throwable $e) {
Log::error('Failed to send Slack notification for order printing started', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Listeners;
use App\Events\OrderMovedToReadyForPrint;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
class NotifySlackOnOrderMovedToReadyForPrint
{
public function handle(OrderMovedToReadyForPrint $event): void
{
try {
$order = $event->order;
$webhook = config('services.slack.production_hook_url');
Log::info('Preparing Slack notification for order ready for print', [
'webhook_configured' => !empty($webhook),
'order_number' => $order->order_number,
]);
if (! $webhook) {
Log::warning('Slack production channel webhook not configured');
return;
}
$payload = [
'text' => 'Order Ready for Print',
'blocks' => [
[
'type' => 'header',
'text' => [
'type' => 'plain_text',
'text' => '✅ Order Ready for Print',
],
],
[
'type' => 'section',
'fields' => [
[
'type' => 'mrkdwn',
'text' => "*Order Number:*\n#{$order->order_number}",
],
[
'type' => 'mrkdwn',
'text' => "*Status:*\nReady for Print",
],
],
],
[
'type' => 'context',
'elements' => [
[
'type' => 'mrkdwn',
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
],
],
],
],
];
$response = Http::post($webhook, $payload);
Log::info('Slack notification sent for order ready for print', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'channel' => 'production',
'status_code' => $response->status(),
]);
} catch (\Throwable $e) {
Log::error('Failed to send Slack notification for order ready for print', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
}
}
+14 -3
View File
@@ -27,14 +27,25 @@ class NotifySlackOnOrderPacked
Log::info('Order packed notification sent', ['order_uuid' => $order->uuid]);
// Move Trello card to Packing list
// Move Trello card to Ready to Ship and populate shipping dimensions as custom fields
if ($order->trello_card_id) {
$this->trello->moveCard($order->trello_card_id, 'Packing');
// Move card to Ready to Ship list
$this->trello->moveCard($order->trello_card_id, 'Ready to Ship');
// Populate custom fields with packing dimensions
$this->trello->setNumberField($order->trello_card_id, 'ship_w', $event->width);
$this->trello->setNumberField($order->trello_card_id, 'ship_h', $event->height);
$this->trello->setNumberField($order->trello_card_id, 'ship_l', $event->length);
$this->trello->setNumberField($order->trello_card_id, 'weight', $event->weight);
// Try to check off "Packed" item in checklist
$this->trello->checkItem($order->trello_card_id, 'Packing', 'Packed');
Log::info('Trello card moved to Packing', ['order_uuid' => $order->uuid]);
Log::info('Trello card moved to Ready to Ship and dimensions added', [
'order_uuid' => $order->uuid,
'dimensions' => "{$event->width}x{$event->length}x{$event->height}cm",
'weight' => "{$event->weight}kg",
]);
}
}
}
+2 -17
View File
@@ -28,22 +28,7 @@ class NotifySlackOnShipmentCreated
Log::info('Shipment created notification sent', ['order_uuid' => $order->uuid]);
// Attach shipping documents to Trello card
if ($order->trello_card_id) {
if ($event->stickerPath && Storage::disk('public')->exists($event->stickerPath)) {
$stickerUrl = Storage::disk('public')->url($event->stickerPath);
$this->trello->attachFile($order->trello_card_id, 'Sticker.pdf', $stickerUrl);
}
if ($event->waybillPath && Storage::disk('public')->exists($event->waybillPath)) {
$waybillUrl = Storage::disk('public')->url($event->waybillPath);
$this->trello->attachFile($order->trello_card_id, 'Waybill.pdf', $waybillUrl);
}
// Move card to Awaiting Collection
$this->trello->moveCard($order->trello_card_id, 'Awaiting Collection');
Log::info('Trello card updated with shipment details', ['order_uuid' => $order->uuid]);
}
// Note: PDFs are already attached to Trello card by CreateShipmentOnReadyToShip listener
// This listener only handles Slack notification
}
}
+1
View File
@@ -36,6 +36,7 @@ class CustomOrder extends Model
'proof_approved_at',
'packing_width',
'packing_length',
'packing_height',
'packing_weight',
'packing_completed_at',
'packed_by',
+29
View File
@@ -26,6 +26,15 @@ class Order extends Model
'customer_email',
'customer_phone',
'shipping_address',
'shipping_street_address',
'shipping_unit_number',
'shipping_local_area',
'shipping_city',
'shipping_zone',
'shipping_country',
'shipping_postcode',
'shipping_type',
'business_name',
'notes',
'yoco_checkout_id',
'yoco_redirect_url',
@@ -33,12 +42,19 @@ class Order extends Model
'yoco_payment_id',
'packing_width',
'packing_length',
'packing_height',
'packing_weight',
'packing_completed_at',
'packed_by',
'courier_shipment_id',
'courier_waybill_id',
'courier_tracking_number',
'courier_status',
'courier_rate',
'courier_service_level_code',
'courier_service_level_id',
'courier_collection_min_date',
'courier_delivery_min_date',
'delivered_at',
'delivery_failure_reason',
'trello_card_id',
@@ -46,6 +62,19 @@ class Order extends Model
'qr_generated_at',
];
protected function casts(): array
{
return [
'packing_completed_at' => 'datetime',
'delivered_at' => 'datetime',
'qr_generated_at' => 'datetime',
'courier_collection_min_date' => 'datetime',
'courier_delivery_min_date' => 'datetime',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function user()
{
return $this->belongsTo(User::class);
+44 -3
View File
@@ -4,7 +4,14 @@ namespace App\Providers;
use App\Events\BalancePaid;
use App\Events\DepositPaid;
use App\Events\InspectionPassed;
use App\Events\InspectionFailed;
use App\Events\OrderCreated;
use App\Events\OrderMovedToPrep;
use App\Events\OrderMovedToAwaitingApproval;
use App\Events\OrderMovedToReadyForPrint;
use App\Events\OrderMovedToPrinting;
use App\Events\OrderMovedToInspection;
use App\Events\OrderPacked;
use App\Events\ParcelCollected;
use App\Events\ParcelDelivered;
@@ -18,13 +25,21 @@ use App\Events\ShipmentCreated;
use App\Events\ShipmentCreationFailed;
use App\Listeners\CreateShipmentOnReadyToShip;
use App\Listeners\GenerateQrCodeOnOrderCreated;
use App\Listeners\MoveCardToPackingOnInspectionPassed;
use App\Listeners\NotifySlackOnOrderCreated;
use App\Listeners\NotifySlackOnOrderMovedToPrep;
use App\Listeners\NotifySlackOnOrderMovedToAwaitingApproval;
use App\Listeners\NotifySlackOnOrderMovedToReadyForPrint;
use App\Listeners\NotifySlackOnOrderMovedToPrinting;
use App\Listeners\NotifySlackOnOrderPacked;
use App\Listeners\NotifySlackOnParcelCollected;
use App\Listeners\NotifySlackOnParcelDelivered;
use App\Listeners\NotifySlackOnParcelFailedDelivery;
use App\Listeners\NotifySlackOnShipmentCreated;
use App\Listeners\NotifySlackOnShipmentCreationFailed;
use App\Listeners\NotifySlackOnInspectionPassed;
use App\Listeners\NotifySlackOnInspectionFailed;
use App\Listeners\NotifySlackOnCardMovedToInspection;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
@@ -43,16 +58,42 @@ class EventServiceProvider extends ServiceProvider
GenerateQrCodeOnOrderCreated::class,
],
// Trello card move events
OrderMovedToPrep::class => [
NotifySlackOnOrderMovedToPrep::class,
],
OrderMovedToAwaitingApproval::class => [
NotifySlackOnOrderMovedToAwaitingApproval::class,
],
OrderMovedToReadyForPrint::class => [
NotifySlackOnOrderMovedToReadyForPrint::class,
],
OrderMovedToPrinting::class => [
NotifySlackOnOrderMovedToPrinting::class,
],
// Packing events
OrderPacked::class => [
NotifySlackOnOrderPacked::class,
],Ready to Ship intent (from Trello webhook)
],
// Inspection events
InspectionPassed::class => [
MoveCardToPackingOnInspectionPassed::class,
NotifySlackOnInspectionPassed::class,
],
InspectionFailed::class => [
NotifySlackOnInspectionFailed::class,
],
OrderMovedToInspection::class => [
NotifySlackOnCardMovedToInspection::class,
],
// Ready to Ship intent (from Trello webhook)
ReadyToShipIntent::class => [
CreateShipmentOnReadyToShip::class,
],
//
// Shipment events
ShipmentCreated::class => [
NotifySlackOnShipmentCreated::class,
+558 -106
View File
@@ -6,6 +6,7 @@ use App\Models\Order;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Carbon\Carbon;
class CourierService
{
@@ -15,11 +16,11 @@ class CourierService
public function __construct()
{
$this->apiKey = config('courier.api_key');
$this->baseUrl = config('courier.api_base_url', 'https://api.shiplogic.com/api');
$this->baseUrl = config('courier.api_base_url', 'https://api.shiplogic.com');
}
/**
* Create shipment with full validation and database updates
* Create shipment with full validation, rates fetching, and document retrieval
*
* @param Order $order
* @return array{waybill_id: string, tracking_number: string, sticker_path: ?string, waybill_path: ?string}
@@ -33,52 +34,103 @@ class CourierService
if (! $this->validatePacking($order)) {
throw new \Exception('Order not yet packed with valid dimensions');
}
Log::info('Packing validation passed', ['order_uuid' => $order->uuid]);
// Guard 2: Validate payment/approval
if (! $this->validatePayment($order)) {
throw new \Exception($order->is_custom_order ?
throw new \Exception(
$order->is_custom_order ?
'Custom order requires proof approved and balance paid' :
'Standard order must be fully paid'
);
}
Log::info('Payment validation passed', ['order_uuid' => $order->uuid]);
// Guard 3: Validate order status
if ($order->status !== 'ready_to_ship') {
throw new \Exception('Order must be in Ready to Ship state');
}
Log::info('Order status validation passed', ['order_uuid' => $order->uuid]);
// Guard 4: Prevent duplicates
if ($order->courier_waybill_id) {
throw new \Exception('Shipment already exists for this order');
}
Log::info('Duplicate shipment validation passed', ['order_uuid' => $order->uuid]);
try {
// Call API to create shipment
// Step 1: Get rates and select ECO (cheapest) service level
Log::info('Fetching shipping rates', ['order_uuid' => $order->uuid]);
$rates = $this->getRates($order);
if (empty($rates)) {
throw new \Exception('No shipping rates available for this route');
}
Log::info('Shipping rates retrieved', [
'order_uuid' => $order->uuid,
'rate_count' => count($rates),
]);
// Select ECO rate (should be cheapest)
$selectedRate = $this->selectEcoRate($rates);
if (!$selectedRate) {
throw new \Exception('ECO service level not available for this route');
}
Log::info('Selected ECO service level', [
'order_uuid' => $order->uuid,
'service_level' => $selectedRate['service_level']['code'],
'rate' => $selectedRate['rate'],
]);
// Step 2: Build delivery address from order fields
$deliveryAddress = $this->buildDeliveryAddress($order);
Log::info('Built delivery address', [
'order_uuid' => $order->uuid,
'delivery_address' => $deliveryAddress,
]);
// Step 3: Determine collection and delivery minimum dates
[$collectionMinDate, $deliveryMinDate] = $this->getMinimumDates();
Log::info('Determined minimum dates', [
'order_uuid' => $order->uuid,
'collection_min_date' => $collectionMinDate,
'delivery_min_date' => $deliveryMinDate,
]);
// Step 4: Call API to create shipment with all proper data
$shipmentData = $this->callCreateShipmentApi(
$order->id,
$order->packing_width,
$order->packing_length,
$order->packing_weight,
$order,
$deliveryAddress,
$selectedRate,
$collectionMinDate,
$deliveryMinDate,
);
// Save shipment details to database
Log::info('Shipment created via API', [
'order_uuid' => $order->uuid,
'shipment_id' => $shipmentData['shipment_id'],
'waybill_id' => $shipmentData['waybill_id'],
'tracking_number' => $shipmentData['tracking_number'],
]);
// Step 5: Save shipment details to database
$order->update([
'courier_shipment_id' => $shipmentData['shipment_id'],
'courier_waybill_id' => $shipmentData['waybill_id'],
'courier_tracking_number' => $shipmentData['tracking_number'],
'courier_rate' => $selectedRate['rate'],
'courier_service_level_code' => $selectedRate['service_level']['code'],
'courier_service_level_id' => $selectedRate['service_level']['id'],
'courier_collection_min_date' => $collectionMinDate,
'courier_delivery_min_date' => $deliveryMinDate,
'courier_status' => 'awaiting_collection',
'status' => 'awaiting_collection',
]);
Log::info('Shipment created successfully', [
'order_uuid' => $order->uuid,
'shipment_id' => $shipmentData['shipment_id'],
'waybill_id' => $shipmentData['waybill_id'],
'service_level' => $selectedRate['service_level']['code'],
'rate' => $selectedRate['rate'],
]);
// Fetch shipping documents
$stickerPath = $this->fetchSticker($shipmentData['shipment_id'], $order->id);
$waybillPath = $this->fetchWaybill($shipmentData['shipment_id'], $order->id);
// Step 6: Fetch shipping documents
$stickerPath = $this->fetchAndStoreSticker($shipmentData['shipment_id'], $order->uuid);
$waybillPath = $this->fetchAndStoreWaybill($shipmentData['shipment_id'], $order->uuid);
return [
'shipment_id' => $shipmentData['shipment_id'],
'waybill_id' => $shipmentData['waybill_id'],
'tracking_number' => $shipmentData['tracking_number'],
'sticker_path' => $stickerPath,
@@ -95,66 +147,474 @@ class CourierService
}
/**
* Create a shipment with Shiplogic API
*
* @param string $orderId
* @param float $width Width in cm
* @param float $length Length in cm
* @param float $weight Weight in kg
* @return array{shipment_id: string, waybill_id: string, tracking_number: string}
* @throws \Exception
* Get available shipping rates for an order
*/
private function callCreateShipmentApi(string $orderId, float $width, float $length, float $weight): array
private function getRates(Order $order): array
{
if (! $this->isConfigured()) {
throw new \Exception('Courier API not configured');
}
if ($width <= 0 || $length <= 0 || $weight <= 0) {
throw new \Exception('Invalid dimensions or weight: all must be greater than 0');
}
try {
// Build shipment payload for Shiplogic
$deliveryAddress = $this->buildDeliveryAddress($order);
Log::info('Built delivery address for rates', [
'order_uuid' => $order->uuid,
'delivery_address' => $deliveryAddress,
]);
$collectionAddress = config('services.shiplogic.collection_address');
Log::info('Using collection address for rates', [
'order_uuid' => $order->uuid,
'collection_address' => $collectionAddress,
]);
$payload = [
'parcel' => [
'weight' => $weight,
'height' => 10, // TODO: Update when height is captured separately
'width' => $width,
'length' => $length,
'collection_address' => $collectionAddress,
'delivery_address' => $deliveryAddress,
'parcels' => [
[
'submitted_length_cm' => (float) $order->packing_length,
'submitted_width_cm' => (float) $order->packing_width,
'submitted_height_cm' => (float) ($order->packing_height ?? 10),
'submitted_weight_kg' => (float) $order->packing_weight,
],
'destination' => [
// TODO: Get from order's shipping address
],
'reference' => $orderId,
];
Log::info('Prepared rates request payload', [
'order_uuid' => $order->uuid,
'payload' => $payload,
]);
$ratesUrl = "{$this->baseUrl}/rates";
Log::info('Fetching shipping rates from Shiplogic', [
'order_uuid' => $order->uuid,
'base_url' => $this->baseUrl,
'full_url' => $ratesUrl,
'api_key_set' => ! empty($this->apiKey),
'api_key_length' => strlen($this->apiKey ?? ''),
'collection_address' => $collectionAddress,
'delivery_address' => $deliveryAddress,
'parcel_dimensions' => [
'length' => $order->packing_length,
'width' => $order->packing_width,
'height' => $order->packing_height ?? 10,
'weight' => $order->packing_weight,
],
]);
$response = Http::withHeaders([
'Authorization' => "Bearer {$this->apiKey}",
])->post("{$this->baseUrl}/shipments", $payload);
])->post($ratesUrl, $payload);
Log::info('Rates API response received', [
'order_uuid' => $order->uuid,
'status' => $response->status(),
'successful' => $response->successful(),
]);
if (! $response->successful()) {
$errorMessage = $response->json('error.message', 'Unknown error');
$errorData = $response->json();
$errorMessage = $errorData['error']['message'] ?? $errorData['message'] ?? 'Unknown error';
Log::error('Rates API error response', [
'order_uuid' => $order->uuid,
'status' => $response->status(),
'error_message' => $errorMessage,
'full_response' => $response->json(),
]);
throw new \Exception("Failed to fetch rates: {$errorMessage}");
}
$data = $response->json();
Log::info('Rates fetched successfully', [
'order_uuid' => $order->uuid,
'rate_count' => count($data['rates'] ?? []),
]);
return $data['rates'] ?? [];
} catch (\Exception $e) {
Log::error('Failed to get shipping rates', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
throw $e;
}
}
/**
* Select the ECO (Economy) service level - should be the cheapest
*/
private function selectEcoRate(array $rates): ?array
{
foreach ($rates as $rate) {
if (isset($rate['service_level']) && $rate['service_level']['code'] === 'ECO') {
return $rate;
}
}
// If ECO not found, return the cheapest rate available
if (empty($rates)) {
return null;
}
usort($rates, function ($a, $b) {
return ($a['rate'] ?? PHP_INT_MAX) <=> ($b['rate'] ?? PHP_INT_MAX);
});
return $rates[0] ?? null;
}
/**
* Build complete delivery address from order shipping fields
*/
private function buildDeliveryAddress(Order $order): array
{
// Combine unit number and street address
$streetAddress = $order->shipping_street_address;
if ($order->shipping_unit_number) {
$streetAddress = "{$order->shipping_unit_number}, {$streetAddress}";
}
return [
'type' => $order->shipping_type ?? 'residential',
'company' => $order->business_name ?? '',
'street_address' => $streetAddress,
'local_area' => $order->shipping_local_area ?? '',
'city' => $order->shipping_city ?? '',
'zone' => $order->shipping_zone ?? '',
'code' => $order->shipping_postcode ?? '',
'country' => $order->shipping_country ?? 'ZA',
];
}
/**
* Determine collection and delivery minimum dates
* If before noon: today
* If after noon: tomorrow
*/
private function getMinimumDates(): array
{
$now = Carbon::now();
$noon = Carbon::now()->setHour(12)->setMinute(0)->setSecond(0);
if ($now->isBefore($noon)) {
$date = $now->startOfDay();
} else {
$date = $now->addDay()->startOfDay();
}
return [$date, $date];
}
/**
* Create a shipment with Shiplogic API
*/
private function callCreateShipmentApi(
Order $order,
array $deliveryAddress,
array $selectedRate,
\DateTime $collectionMinDate,
\DateTime $deliveryMinDate,
): array {
if (! $this->isConfigured()) {
throw new \Exception('Courier API not configured');
}
Log::info('Preparing to create shipment via API', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
]);
// Validate required shipping info
if (! $order->customer_name || ! $order->shipping_street_address) {
throw new \Exception('Order missing required customer name or shipping address');
}
Log::info('Validated required shipping info', [
'order_uuid' => $order->uuid,
'customer_name' => $order->customer_name,
'shipping_street_address' => $order->shipping_street_address,
]);
if (! $order->customer_email && ! $order->customer_phone) {
throw new \Exception('Order must have at least email or phone number');
}
Log::info('Validated contact information', [
'order_uuid' => $order->uuid,
'customer_email' => $order->customer_email,
'customer_phone' => $order->customer_phone,
]);
try {
$collectionAddress = config('services.shiplogic.collection_address');
$collectionContact = config('services.shiplogic.collection_contact');
$payload = [
'collection_address' => $collectionAddress,
'collection_contact' => $collectionContact,
'delivery_address' => $deliveryAddress,
'delivery_contact' => [
'name' => $order->customer_name,
'email' => $order->customer_email ?? '',
'mobile_number' => $order->customer_phone ?? '',
],
'parcels' => [
[
'parcel_description' => $order->order_number,
'submitted_length_cm' => (float) $order->packing_length,
'submitted_width_cm' => (float) $order->packing_width,
'submitted_height_cm' => (float) ($order->packing_height ?? 10),
'submitted_weight_kg' => (float) $order->packing_weight,
],
],
'service_level_code' => $selectedRate['service_level']['code'],
'collection_min_date' => $collectionMinDate->format(DATE_ATOM),
'delivery_min_date' => $deliveryMinDate->format(DATE_ATOM),
'customer_reference' => $order->order_number,
'mute_notifications' => false,
];
$shipmentsUrl = "{$this->baseUrl}/shipments";
Log::info('Creating Shiplogic shipment', [
'order_uuid' => $order->uuid,
'order_number' => $order->order_number,
'customer' => $order->customer_name,
'delivery_address' => $deliveryAddress['street_address'],
'service_level' => $selectedRate['service_level']['code'],
'base_url' => $this->baseUrl,
'full_url' => $shipmentsUrl,
'api_key_set' => ! empty($this->apiKey),
'api_key_length' => strlen($this->apiKey ?? ''),
'payload' => $payload,
]);
$response = Http::withHeaders([
'Authorization' => "Bearer {$this->apiKey}",
])->post($shipmentsUrl, $payload);
Log::info('Shipment API response received', [
'order_uuid' => $order->uuid,
'status' => $response->status(),
'successful' => $response->successful(),
]);
if (! $response->successful()) {
$errorData = $response->json();
$errorMessage = $errorData['error']['message'] ?? $errorData['message'] ?? 'Unknown error';
Log::error('Shipment API error response', [
'order_uuid' => $order->uuid,
'status' => $response->status(),
'error_message' => $errorMessage,
'full_response' => $response->json(),
]);
throw new \Exception("Courier API error: {$errorMessage}");
}
$data = $response->json();
Log::info('Shipment created in API', [
'order_uuid' => $order->uuid,
'shipment_id' => $data['id'] ?? null,
'tracking_reference' => $data['short_tracking_reference'] ?? null,
]);
return [
'shipment_id' => $data['id'] ?? null,
'waybill_id' => $data['waybill_number'] ?? null,
'tracking_number' => $data['tracking_number'] ?? null,
'waybill_id' => $data['short_tracking_reference'] ?? $data['id'],
'tracking_number' => $data['short_tracking_reference'] ?? null,
];
} catch (\Exception $e) {
Log::error('Failed to call courier API', [
'order_id' => $orderId,
Log::error('Failed to call courier shipment API', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
throw $e;
}
}
/**
* Fetch and store shipment label (waybill) PDF from Shiplogic
*/
private function fetchAndStoreWaybill(string $shipmentId, string $orderUuid): ?string
{
if (! $this->isConfigured()) {
return null;
}
try {
$url = "{$this->baseUrl}/shipments/label?id={$shipmentId}";
Log::info('Fetching waybill PDF', [
'shipment_id' => $shipmentId,
'order_uuid' => $orderUuid,
'url' => $url,
]);
$response = Http::withHeaders([
'Authorization' => "Bearer {$this->apiKey}",
])->get($url);
Log::info('Waybill PDF response received', [
'shipment_id' => $shipmentId,
'status' => $response->status(),
'successful' => $response->successful(),
'content_type' => $response->header('Content-Type'),
]);
if ($response->successful()) {
$data = $response->json();
// API returns a JSON with S3 URL, need to download the actual PDF
if (isset($data['url'])) {
Log::info('Got S3 URL for waybill PDF', [
'shipment_id' => $shipmentId,
's3_url' => $data['url'],
'filename' => $data['filename'] ?? 'unknown',
'file_size' => $data['file_size'] ?? 'unknown',
]);
// Download the actual PDF from S3
$pdfResponse = Http::get($data['url']);
if ($pdfResponse->successful()) {
$directory = "shipments/{$orderUuid}";
$path = "{$directory}/Shipment Label.pdf";
// Store the binary PDF content
$content = $pdfResponse->body();
Storage::disk('public')->put($path, $content);
Log::info('Waybill PDF stored successfully', [
'shipment_id' => $shipmentId,
'path' => $path,
'file_size' => strlen($content),
'exists' => Storage::disk('public')->exists($path),
]);
return $path;
} else {
Log::error('Failed to download waybill PDF from S3', [
'shipment_id' => $shipmentId,
's3_url' => $data['url'],
'status' => $pdfResponse->status(),
]);
return null;
}
} else {
Log::error('No S3 URL in waybill response', [
'shipment_id' => $shipmentId,
'response' => $data,
]);
return null;
}
}
Log::warning('Failed to fetch waybill from courier', [
'shipment_id' => $shipmentId,
'status' => $response->status(),
'response' => $response->json(),
]);
return null;
} catch (\Exception $e) {
Log::error('Exception fetching waybill', [
'shipment_id' => $shipmentId,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
return null;
}
}
/**
* Fetch and store shipment sticker label PDF from Shiplogic
*/
private function fetchAndStoreSticker(string $shipmentId, string $orderUuid): ?string
{
if (! $this->isConfigured()) {
return null;
}
try {
$url = "{$this->baseUrl}/shipments/label/stickers?id={$shipmentId}";
Log::info('Fetching sticker PDF', [
'shipment_id' => $shipmentId,
'order_uuid' => $orderUuid,
'url' => $url,
]);
$response = Http::withHeaders([
'Authorization' => "Bearer {$this->apiKey}",
])->get($url);
Log::info('Sticker PDF response received', [
'shipment_id' => $shipmentId,
'status' => $response->status(),
'successful' => $response->successful(),
'content_type' => $response->header('Content-Type'),
]);
if ($response->successful()) {
$data = $response->json();
// API returns a JSON with S3 URL, need to download the actual PDF
if (isset($data['url'])) {
Log::info('Got S3 URL for sticker PDF', [
'shipment_id' => $shipmentId,
's3_url' => $data['url'],
'filename' => $data['filename'] ?? 'unknown',
'file_size' => $data['file_size'] ?? 'unknown',
]);
// Download the actual PDF from S3
$pdfResponse = Http::get($data['url']);
if ($pdfResponse->successful()) {
$directory = "shipments/{$orderUuid}";
$path = "{$directory}/Shipment Sticker.pdf";
// Store the binary PDF content
$content = $pdfResponse->body();
Storage::disk('public')->put($path, $content);
Log::info('Sticker PDF stored successfully', [
'shipment_id' => $shipmentId,
'path' => $path,
'file_size' => strlen($content),
'exists' => Storage::disk('public')->exists($path),
]);
return $path;
} else {
Log::error('Failed to download sticker PDF from S3', [
'shipment_id' => $shipmentId,
's3_url' => $data['url'],
'status' => $pdfResponse->status(),
]);
return null;
}
} else {
Log::error('No S3 URL in sticker response', [
'shipment_id' => $shipmentId,
'response' => $data,
]);
return null;
}
}
Log::warning('Failed to fetch sticker from courier', [
'shipment_id' => $shipmentId,
'status' => $response->status(),
'response' => $response->json(),
]);
return null;
} catch (\Exception $e) {
Log::error('Exception fetching sticker', [
'shipment_id' => $shipmentId,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
return null;
}
}
/**
* Validate packing gate: order must be packed with dimensions
*/
@@ -203,68 +663,6 @@ class CourierService
return $valid;
}
/**
* Fetch shipping label/sticker PDF from Shiplogic
*/
public function fetchSticker(string $shipmentId, string $orderId): ?string
{
if (! $this->isConfigured()) {
return null;
}
try {
$response = Http::withHeaders([
'Authorization' => "Bearer {$this->apiKey}",
])->get("{$this->baseUrl}/shipments/{$shipmentId}/sticker");
if ($response->successful()) {
$path = "shipments/{$orderId}/sticker.pdf";
Storage::disk('public')->put($path, $response->body());
return $path;
}
Log::warning('Failed to fetch sticker from courier', ['shipment_id' => $shipmentId]);
return null;
} catch (\Exception $e) {
Log::error('Exception fetching sticker', ['error' => $e->getMessage()]);
return null;
}
}
/**
* Fetch waybill PDF from Shiplogic
*/
public function fetchWaybill(string $shipmentId, string $orderId): ?string
{
if (! $this->isConfigured()) {
return null;
}
try {
$response = Http::withHeaders([
'Authorization' => "Bearer {$this->apiKey}",
])->get("{$this->baseUrl}/shipments/{$shipmentId}/label");
if ($response->successful()) {
$path = "shipments/{$orderId}/waybill.pdf";
Storage::disk('public')->put($path, $response->body());
return $path;
}
Log::warning('Failed to fetch waybill from courier', ['shipment_id' => $shipmentId]);
return null;
} catch (\Exception $e) {
Log::error('Exception fetching waybill', ['error' => $e->getMessage()]);
return null;
}
}
/**
* Check if courier is configured
*/
@@ -272,4 +670,58 @@ class CourierService
{
return ! empty($this->apiKey);
}
/**
* Public method to re-download shipment PDFs for an existing shipment
*
* @param Order $order
* @return array{success: bool, sticker_path: ?string, waybill_path: ?string, message: string}
*/
public function redownloadShipmentPdfs(Order $order): array
{
if (! $order->courier_shipment_id) {
return [
'success' => false,
'message' => 'No shipment exists for this order',
'sticker_path' => null,
'waybill_path' => null,
];
}
try {
Log::info('Re-downloading shipment PDFs', [
'order_uuid' => $order->uuid,
'shipment_id' => $order->courier_shipment_id,
]);
$stickerPath = $this->fetchAndStoreSticker($order->courier_shipment_id, $order->uuid);
$waybillPath = $this->fetchAndStoreWaybill($order->courier_shipment_id, $order->uuid);
Log::info('Shipment PDFs re-downloaded successfully', [
'order_uuid' => $order->uuid,
'sticker_path' => $stickerPath,
'waybill_path' => $waybillPath,
]);
return [
'success' => true,
'message' => 'PDFs re-downloaded successfully',
'sticker_path' => $stickerPath,
'waybill_path' => $waybillPath,
];
} catch (\Exception $e) {
Log::error('Failed to re-download shipment PDFs', [
'order_uuid' => $order->uuid,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
return [
'success' => false,
'message' => 'Failed to re-download PDFs: ' . $e->getMessage(),
'sticker_path' => null,
'waybill_path' => null,
];
}
}
}
+14
View File
@@ -112,6 +112,20 @@ class TrelloService
return $response->successful();
}
/**
* Add a comment to a card
*/
public function addComment(string $cardId, string $text): bool
{
$response = Http::post("{$this->baseUrl}/cards/{$cardId}/actions/comments", [
'text' => $text,
'key' => $this->apiKey,
'token' => $this->apiToken,
]);
return $response->successful();
}
/**
* Mark checklist item complete
*/
+107
View File
@@ -0,0 +1,107 @@
<?php
namespace App\Testing;
use Illuminate\Http\Client\Request;
use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;
/**
* Mock HTTP Client for testing Shiplogic API interactions
*
* Usage in tests:
* ShiplogicMockClient::setup();
* // Now all HTTP requests to shiplogic will return mock responses
*/
class ShiplogicMockClient
{
/**
* Setup mock HTTP responses for Shiplogic API
*/
public static function setup(): void
{
Http::fake([
'shiplogic.*/rates' => Http::response(self::ratesResponse(), 200),
'shiplogic.*/shipments' => Http::response(self::shipmentsResponse(), 201),
'shiplogic.*/shipments/label' => Http::response(self::pdfResponse(), 200, [
'Content-Type' => 'application/pdf',
]),
'shiplogic.*/shipments/label/stickers' => Http::response(self::pdfResponse(), 200, [
'Content-Type' => 'application/pdf',
]),
]);
}
/**
* Mock response for /rates endpoint
*/
public static function ratesResponse(): array
{
return [
'id' => '550e8400-e29b-41d4-a716-446655440001',
'company_shipment_rates' => [
[
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a00',
'company_code' => 'FEDEX',
'company_name' => 'FedEx',
'service_level' => [
'id' => '123456789',
'code' => 'FEDEX_INTERNATIONAL_PRIORITY_EXPRESS',
'name' => 'International Priority Express',
'description' => 'Fastest service',
],
'rate' => 125.50,
'currency' => 'GBP',
'transit_days' => '1-2',
'delivery_guarantee_date' => '2026-01-05',
],
[
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a01',
'company_code' => 'FEDEX',
'company_name' => 'FedEx',
'service_level' => [
'id' => '123456790',
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
'name' => 'International Economy',
'description' => 'Economy service (ECO)',
],
'rate' => 45.75,
'currency' => 'GBP',
'transit_days' => '5-7',
'delivery_guarantee_date' => '2026-01-09',
],
],
];
}
/**
* Mock response for /shipments endpoint
*/
public static function shipmentsResponse(): array
{
return [
'id' => '550e8400-e29b-41d4-a716-446655440002',
'short_tracking_reference' => 'SHP123456789',
'tracking_reference' => 'SHP-123456789-ABC',
'customer_reference' => 'ORDER-12345',
'company_code' => 'FEDEX',
'service_level' => [
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
'name' => 'International Economy',
],
'collection_min_date' => '2026-01-04',
'delivery_min_date' => '2026-01-09',
'status' => 'created',
'created_at' => now()->toIso8601String(),
];
}
/**
* Mock PDF response
*/
public static function pdfResponse(): string
{
// Minimal valid PDF
return "%PDF-1.4\n1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n3 0 obj\n<< /Type /Page /Parent 2 0 R /Resources << /Font << /F1 4 0 R >> >> /MediaBox [0 0 612 792] /Contents 5 0 R >>\nendobj\n4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>\nendobj\n5 0 obj\n<< /Length 44 >>\nstream\nBT\n/F1 12 Tf\n100 700 Td\n(Mock PDF) Tj\nET\nendstream\nendobj\nxref\n0 6\n0000000000 65535 f\n0000000009 00000 n\n0000000058 00000 n\n0000000115 00000 n\n0000000273 00000 n\n0000000352 00000 n\ntrailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n446\n%%EOF";
}
}
+5 -1
View File
@@ -2,6 +2,10 @@
return [
'api_key' => env('COURIER_API_KEY'),
'api_base_url' => env('COURIER_API_BASE_URL', 'https://api.shiplogic.com/api'),
'api_base_url' => env('COURIER_API_BASE_URL', 'https://api.shiplogic.com'),
'webhook_secret' => env('COURIER_WEBHOOK_SECRET'),
// Use shiplogic config from services.php
'shiplogic_collection_address' => config('services.shiplogic.collection_address'),
'shiplogic_collection_contact' => config('services.shiplogic.collection_contact'),
];
+29
View File
@@ -44,6 +44,11 @@ return [
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
],
'design_hook_url' => env('SLACK_DESIGN_HOOK_URL'),
'production_hook_url' => env('SLACK_PRODUCTION_HOOK_URL'),
'orders_hook_url' => env('SLACK_ORDERS_HOOK_URL'),
'shipping_hook_url' => env('SLACK_SHIPPING_HOOK_URL'),
'opsalert_hook_url' => env('SLACK_OPSALERT_HOOK_URL'),
],
'yoco' => [
@@ -59,4 +64,28 @@ return [
'redirect' => env('GOOGLE_REDIRECT_URI', '/auth/google/callback'),
],
'google_places' => [
'api_key' => env('GOOGLE_PLACES_API_KEY'),
],
'shiplogic' => [
'api_key' => env('COURIER_API_KEY'),
'api_base_url' => env('COURIER_API_BASE_URL', 'https://api.shiplogic.com'),
'collection_address' => [
'type' => 'business',
'company' => env('SHIPLOGIC_COLLECTION_COMPANY', 'Two Tales Designs'),
'street_address' => env('SHIPLOGIC_COLLECTION_STREET', '194 Bancor Avenue'),
'local_area' => env('SHIPLOGIC_COLLECTION_AREA', 'Menlyn'),
'city' => env('SHIPLOGIC_COLLECTION_CITY', 'Cape Town'),
'zone' => env('SHIPLOGIC_COLLECTION_ZONE', 'Western Cape'),
'code' => env('SHIPLOGIC_COLLECTION_CODE', '8000'),
'country' => env('SHIPLOGIC_COLLECTION_COUNTRY', 'ZA'),
],
'collection_contact' => [
'name' => env('SHIPLOGIC_COLLECTION_CONTACT_NAME', 'Two Tales Designs'),
'email' => env('SHIPLOGIC_COLLECTION_EMAIL', env('MAIL_FROM_ADDRESS')),
'mobile_number' => env('SHIPLOGIC_COLLECTION_PHONE', '+27000000000'),
],
],
];
@@ -9,7 +9,9 @@ return new class extends Migration
public function up(): void
{
Schema::table('order_items', function (Blueprint $table) {
if (!Schema::hasColumn('order_items', 'is_sample')) {
$table->boolean('is_sample')->default(false)->after('type');
}
});
}
@@ -9,7 +9,9 @@ return new class extends Migration
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
if (!Schema::hasColumn('orders', 'shipping_fee')) {
$table->decimal('shipping_fee', 10, 2)->default(0)->nullable()->after('total');
}
});
}
@@ -12,7 +12,9 @@ return new class extends Migration
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
if (!Schema::hasColumn('orders', 'invoice_path')) {
$table->string('invoice_path')->nullable()->after('shipping_fee');
}
});
}
@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
// Add new address component columns
$table->string('shipping_street_address')->nullable()->after('shipping_address');
$table->string('shipping_local_area')->nullable()->after('shipping_street_address');
$table->string('shipping_city')->nullable()->after('shipping_local_area');
$table->string('shipping_zone')->nullable()->after('shipping_city');
$table->string('shipping_country')->default('ZA')->after('shipping_zone');
$table->string('shipping_postcode')->nullable()->after('shipping_country');
$table->enum('shipping_type', ['residential', 'business'])->default('residential')->after('shipping_postcode');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('orders', function (Blueprint $table) {
$table->dropColumn([
'shipping_street_address',
'shipping_local_area',
'shipping_city',
'shipping_zone',
'shipping_country',
'shipping_postcode',
'shipping_type',
]);
});
}
};
@@ -0,0 +1,68 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
// Add individual address fields if they don't exist
if (!Schema::hasColumn('orders', 'shipping_street_address')) {
$table->string('shipping_street_address')->nullable()->after('shipping_address');
}
if (!Schema::hasColumn('orders', 'shipping_unit_number')) {
$table->string('shipping_unit_number')->nullable()->after('shipping_street_address');
}
if (!Schema::hasColumn('orders', 'shipping_local_area')) {
$table->string('shipping_local_area')->nullable()->after('shipping_unit_number');
}
if (!Schema::hasColumn('orders', 'shipping_city')) {
$table->string('shipping_city')->nullable()->after('shipping_local_area');
}
if (!Schema::hasColumn('orders', 'shipping_zone')) {
$table->string('shipping_zone')->nullable()->after('shipping_city');
}
if (!Schema::hasColumn('orders', 'shipping_postcode')) {
$table->string('shipping_postcode')->nullable()->after('shipping_zone');
}
if (!Schema::hasColumn('orders', 'shipping_country')) {
$table->string('shipping_country')->default('ZA')->after('shipping_postcode');
}
if (!Schema::hasColumn('orders', 'shipping_type')) {
$table->enum('shipping_type', ['residential', 'business'])->default('residential')->after('shipping_country');
}
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('orders', function (Blueprint $table) {
$table->dropColumnIfExists([
'shipping_street_address',
'shipping_unit_number',
'shipping_local_area',
'shipping_city',
'shipping_zone',
'shipping_postcode',
'shipping_country',
'shipping_type'
]);
});
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
if (!Schema::hasColumn('orders', 'business_name')) {
$table->string('business_name')->nullable()->after('shipping_type');
}
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('orders', function (Blueprint $table) {
$table->dropColumnIfExists('business_name');
});
}
};
@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
if (!Schema::hasColumn('orders', 'packing_height')) {
$table->decimal('packing_height', 8, 2)->nullable()->comment('Height in cm')->after('packing_length');
}
});
Schema::table('custom_orders', function (Blueprint $table) {
if (!Schema::hasColumn('custom_orders', 'packing_height')) {
$table->decimal('packing_height', 8, 2)->nullable()->comment('Height in cm')->after('packing_length');
}
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('orders', function (Blueprint $table) {
$table->dropColumnIfExists('packing_height');
});
Schema::table('custom_orders', function (Blueprint $table) {
$table->dropColumnIfExists('packing_height');
});
}
};
@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('orders', function (Blueprint $table) {
// Shipment rate and service level information
$table->decimal('courier_rate', 10, 2)->nullable()->after('courier_status');
$table->string('courier_service_level_code')->nullable()->after('courier_rate');
$table->integer('courier_service_level_id')->nullable()->after('courier_service_level_code');
// Collection and delivery date information
$table->datetime('courier_collection_min_date')->nullable()->after('courier_service_level_id');
$table->datetime('courier_delivery_min_date')->nullable()->after('courier_collection_min_date');
// Shipment ID from Shiplogic API
$table->string('courier_shipment_id')->nullable()->after('courier_delivery_min_date');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('orders', function (Blueprint $table) {
$table->dropColumn([
'courier_rate',
'courier_service_level_code',
'courier_service_level_id',
'courier_collection_min_date',
'courier_delivery_min_date',
'courier_shipment_id',
]);
});
}
};
+280 -9
View File
@@ -43,7 +43,9 @@
}
.form-group input,
.form-group textarea {
.form-group textarea,
.form-group select,
.address-search-group input {
width: 100%;
padding: 0.75rem;
border: 1px solid #ddd;
@@ -58,12 +60,52 @@
}
.form-group input:focus,
.form-group textarea:focus {
.form-group textarea:focus,
.form-group select:focus,
.address-search-group input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(45, 80, 71, 0.1);
}
/* Google Places Autocomplete styling */
.pac-container {
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
margin-top: 4px;
}
.pac-item {
padding: 0.75rem;
cursor: pointer;
}
.pac-item:hover {
background-color: #f0f0f0;
}
.address-search-group {
margin-bottom: 1.5rem;
position: relative;
}
.address-clear-btn {
position: absolute;
right: 12px;
top: 32px;
background: none;
border: none;
color: #999;
cursor: pointer;
font-size: 1.2rem;
padding: 0;
display: none;
}
.address-clear-btn.show {
display: block;
}
.order-summary {
height: fit-content;
}
@@ -197,23 +239,74 @@
<h2>Delivery Information</h2>
<div class="form-group">
<label for="customer_name">Full Name</label>
<input type="text" id="customer_name" name="customer_name" value="{{ old('customer_name') }}" required>
<label for="customer_name">Full Name<span style="color: red;">*</span></label>
<input type="text" id="customer_name" name="customer_name" value="{{ old('customer_name', Auth::check() ? Auth::user()->name : '') }}" required>
</div>
<div class="form-group">
<label for="customer_email">Email Address</label>
<input type="email" id="customer_email" name="customer_email" value="{{ old('customer_email') }}" required>
<label for="customer_email">Email Address<span style="color: red;">*</span></label>
<input type="email" id="customer_email" name="customer_email" value="{{ old('customer_email', Auth::check() ? Auth::user()->email : '') }}" required>
</div>
<div class="form-group">
<label for="customer_phone">Phone Number</label>
<label for="customer_phone">Phone Number<span style="color: red;">*</span></label>
<input type="tel" id="customer_phone" name="customer_phone" value="{{ old('customer_phone') }}" required>
</div>
<div class="form-group">
<label for="shipping_address">Delivery Address</label>
<textarea id="shipping_address" name="shipping_address" required>{{ old('shipping_address') }}</textarea>
<label for="shipping_type">Address Type <span style="color: red;">*</span></label>
<select id="shipping_type" name="shipping_type" required>
<option value="residential" {{ old('shipping_type') === 'residential' ? 'selected' : '' }}>Residential</option>
<option value="business" {{ old('shipping_type') === 'business' ? 'selected' : '' }}>Business</option>
</select>
</div>
<div class="form-group" id="business_name_group" style="display: none;">
<label for="business_name">Business Name <span style="color: red;">*</span></label>
<input type="text" id="business_name" name="business_name" value="{{ old('business_name') }}" placeholder="Enter your business name">
</div>
<div class="address-search-group">
<label for="address_search">Delivery Address (Type to search)</label>
<input type="text" id="address_search" placeholder="Start typing your address..." autocomplete="off">
<button type="button" class="address-clear-btn" id="address_clear_btn"></button>
</div>
<div id="address_fields_group">
<div class="form-group">
<label for="shipping_unit_number">Apartment / Unit / Building Number (Optional)</label>
<input type="text" id="shipping_unit_number" name="shipping_unit_number" placeholder="e.g. Apt 101, Unit B, Building 3" value="{{ old('shipping_unit_number') }}">
</div>
<div class="form-group">
<label for="shipping_street_address">Street Address <span style="color: red;">*</span></label>
<input type="text" id="shipping_street_address" name="shipping_street_address" value="{{ old('shipping_street_address') }}" required>
</div>
<div class="form-group">
<label for="shipping_local_area">Suburb<span style="color: red;">*</span></label>
<input type="text" id="shipping_local_area" name="shipping_local_area" value="{{ old('shipping_local_area') }}" required>
</div>
<div class="form-group">
<label for="shipping_city">City <span style="color: red;">*</span></label>
<input type="text" id="shipping_city" name="shipping_city" value="{{ old('shipping_city') }}" required>
</div>
<div class="form-group">
<label for="shipping_zone">Province<span style="color: red;">*</span></label>
<input type="text" id="shipping_zone" name="shipping_zone" value="{{ old('shipping_zone') }}" required>
</div>
<div class="form-group">
<label for="shipping_postcode">Postal Code <span style="color: red;">*</span></label>
<input type="text" id="shipping_postcode" name="shipping_postcode" value="{{ old('shipping_postcode') }}" required>
</div>
<div class="form-group">
<label for="shipping_country">Country</label>
<input type="text" id="shipping_country" name="shipping_country" value="ZA" readonly>
</div>
</div>
<div class="form-group">
@@ -287,4 +380,182 @@
</div>
</div>
</div>
@php
$apiKey = config('services.google_places.api_key');
@endphp
@if(!$apiKey)
<div style="background: #fff3cd; padding: 1rem; margin-bottom: 1rem; border-radius: 4px; color: #856404;">
<strong>⚠️ Configuration Issue:</strong> Google Places API key is not configured. Please add <code>GOOGLE_PLACES_API_KEY</code> to your .env file.
</div>
@endif
<script>
// console.log('Checkout page loaded');
// console.log('API Key configured:', {{ $apiKey ? 'true' : 'false' }});
// @if($apiKey)
// console.log('API Key length:', {{ strlen($apiKey) }});
// @endif
</script>
@if($apiKey)
<script async defer src="https://maps.googleapis.com/maps/api/js?key={{ $apiKey }}&loading=async&libraries=places&callback=initializeAddressAutocomplete"></script>
<!-- <script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "{{ $apiKey }}",
v: "weekly",
}); -->
</script>
<script>
// Handle shipping type change
document.getElementById('shipping_type').addEventListener('change', function() {
const businessNameGroup = document.getElementById('business_name_group');
const businessNameInput = document.getElementById('business_name');
if (this.value === 'business') {
businessNameGroup.style.display = 'block';
businessNameInput.setAttribute('required', 'required');
} else {
businessNameGroup.style.display = 'none';
businessNameInput.removeAttribute('required');
businessNameInput.value = '';
}
});
// Check initial state on page load
document.addEventListener('DOMContentLoaded', function() {
const shippingType = document.getElementById('shipping_type');
if (shippingType && shippingType.value === 'business') {
document.getElementById('business_name_group').style.display = 'block';
}
});
function initializeAddressAutocomplete() {
console.log('✓ Google Maps API loaded');
const addressSearchInput = document.getElementById('address_search');
const clearBtn = document.getElementById('address_clear_btn');
if (!addressSearchInput) {
console.error('Address search input not found');
return;
}
try {
console.log('Initializing Google Places Autocomplete...');
// Using modern Autocomplete with new API
const autocomplete = new google.maps.places.Autocomplete(addressSearchInput, {
componentRestrictions: { country: 'za' },
types: ['geocode']
});
console.log('✓ Google Places Autocomplete initialized');
// Prevent form submission on Enter when autocomplete dropdown is open
addressSearchInput.addEventListener('keydown', function(e) {
const pacContainer = document.querySelector('.pac-container:not([style*="display: none"])');
if (e.key === 'Enter' && pacContainer) {
e.preventDefault();
}
});
// When place is selected
autocomplete.addListener('place_changed', function() {
const place = autocomplete.getPlace();
if (!place.geometry) {
console.warn('Selected place has no geometry');
return;
}
console.log('✓ Address selected:', place.formatted_address);
// Parse address components
const addressComponents = {};
place.address_components.forEach(component => {
addressComponents[component.types[0]] = component.long_name;
});
// Debug: log all available components
console.log('Address components available:', Object.keys(addressComponents));
// Populate form fields
document.getElementById('shipping_street_address').value =
(addressComponents['street_number'] ? addressComponents['street_number'] + ' ' : '') +
(addressComponents['route'] || '');
document.getElementById('shipping_local_area').value =
addressComponents['political'] ||
addressComponents['sublocality'] ||
addressComponents['sublocality_level_1'] ||
addressComponents['sublocality_level_2'] || '';
document.getElementById('shipping_city').value =
addressComponents['locality'] || addressComponents['administrative_area_level_2'] || '';
document.getElementById('shipping_zone').value =
addressComponents['administrative_area_level_1'] || '';
document.getElementById('shipping_postcode').value =
addressComponents['postal_code'] || '';
document.getElementById('shipping_country').value =
addressComponents['country'] || 'ZA';
// Show clear button
clearBtn.classList.add('show');
});
// Clear button functionality
clearBtn.addEventListener('click', function(e) {
e.preventDefault();
addressSearchInput.value = '';
addressSearchInput.focus();
clearBtn.classList.remove('show');
// Clear form fields
document.getElementById('shipping_street_address').value = '';
document.getElementById('shipping_unit_number').value = '';
document.getElementById('shipping_local_area').value = '';
document.getElementById('shipping_city').value = '';
document.getElementById('shipping_zone').value = '';
document.getElementById('shipping_postcode').value = '';
});
} catch (error) {
console.error('✗ Error initializing autocomplete:', error);
showAddressFieldsManually();
}
}
function showAddressFieldsManually() {
const addressSearchInput = document.getElementById('address_search');
if (addressSearchInput) {
addressSearchInput.style.display = 'none';
document.querySelector('label[for="address_search"]').style.display = 'none';
document.getElementById('address_clear_btn').style.display = 'none';
const fieldsGroup = document.getElementById('address_fields_group');
if (fieldsGroup) {
const notice = document.createElement('div');
notice.style.cssText = 'background: #f0f0f0; padding: 1rem; border-radius: 4px; margin-bottom: 1.5rem; color: #666;';
notice.innerHTML = '<strong>Note:</strong> Address search is not available. Please fill in your address details manually below.';
fieldsGroup.parentNode.insertBefore(notice, fieldsGroup);
}
}
}
// If Google API doesn't load after 5 seconds, show fallback
setTimeout(() => {
if (typeof google === 'undefined') {
console.warn('Google Maps API failed to load');
showAddressFieldsManually();
}
}, 5000);
</script>
@endif
@endsection
+153 -20
View File
@@ -2,47 +2,180 @@
<div class="bg-blue-50 border-2 border-blue-200 rounded-lg p-6 mb-8">
<div class="flex items-start">
<div class="flex-1">
<h2 class="text-2xl font-bold text-blue-900 mb-2">📋 Order Status: Read-Only</h2>
<p class="text-blue-800 mb-4">
This order is in the <strong>{{ str_replace('_', ' ', ucfirst($order->status)) }}</strong> phase.
No actions are available at this stage.
</p>
<h2 class="text-2xl font-bold text-blue-900 mb-4">📋 Order Status: {{ str_replace('_', ' ', ucfirst($order->status)) }}</h2>
@if($order->status === 'ready_to_ship')
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
<p class="text-gray-700">
<strong>Next Step:</strong> Move Trello card to "Ready to Ship" to trigger automatic shipment creation.
<div class="bg-white border-l-4 border-blue-500 p-4 rounded mb-6">
<p class="text-gray-700 font-semibold text-lg mb-4">
Shipment created and ready to print labels/stickers
</p>
<div class="space-y-3">
<p class="text-gray-700 font-semibold">Next Steps:</p>
<ol class="list-decimal list-inside space-y-2 text-gray-700">
<li>Print the shipment sticker label</li>
<li>Print the shipment waybill/label</li>
<li>Apply labels to parcel</li>
<li>Move parcel to collection bay</li>
<li>Click "Ready for Collection" button below</li>
</ol>
</div>
<button
type="button"
onclick="markReadyForCollection('{{ $order->uuid }}')"
class="mt-6 w-full bg-green-600 hover:bg-green-700 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200"
>
Ready for Collection
</button>
</div>
@elseif($order->status === 'awaiting_collection')
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
<p class="text-gray-700">
<strong>Status:</strong> Parcel is awaiting collection from courier.
<div class="bg-white border-l-4 border-blue-500 p-4 rounded mb-6">
<p class="text-gray-700 font-semibold text-lg mb-4">
📦 Parcel awaiting collection from courier
</p>
@if($order->courier_waybill_id)
<p class="text-gray-700 mt-2">
<strong>Waybill:</strong> <code class="bg-gray-100 px-2 py-1 rounded">{{ $order->courier_waybill_id }}</code>
<p class="text-gray-700 mt-4">
<strong>Waybill:</strong> <code class="bg-gray-100 px-3 py-2 rounded block mt-2 text-base break-all">{{ $order->courier_waybill_id }}</code>
</p>
@endif
<!-- Re-download PDFs Button -->
@if($order->courier_shipment_id)
<button
type="button"
onclick="redownloadPdfs('{{ $order->uuid }}')"
class="mt-6 w-full bg-orange-500 hover:bg-orange-600 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200"
>
🔄 Re-download Shipment PDFs
</button>
<p class="text-gray-600 text-sm mt-3">If labels are damaged, re-download them.</p>
@endif
</div>
@elseif($order->status === 'in_transit')
<div class="bg-white border-l-4 border-green-500 p-4 rounded">
<p class="text-gray-700">
<strong>Status:</strong> Parcel is in transit to the customer.
<div class="bg-white border-l-4 border-green-500 p-4 rounded mb-6">
<p class="text-gray-700 font-semibold text-lg mb-4">
✈️ Parcel in transit to customer
</p>
@if($order->courier_tracking_number)
<p class="text-gray-700 mt-2">
<strong>Tracking:</strong> <code class="bg-gray-100 px-2 py-1 rounded">{{ $order->courier_tracking_number }}</code>
<p class="text-gray-700 mt-4">
<strong>Tracking Number:</strong> <code class="bg-gray-100 px-3 py-2 rounded block mt-2 text-base break-all">{{ $order->courier_tracking_number }}</code>
</p>
@endif
<!-- Re-download PDFs Button -->
@if($order->courier_shipment_id)
<button
type="button"
onclick="redownloadPdfs('{{ $order->uuid }}')"
class="mt-6 w-full bg-orange-500 hover:bg-orange-600 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200"
>
🔄 Re-download Shipment PDFs
</button>
<p class="text-gray-600 text-sm mt-3">If labels are damaged, re-download them.</p>
@endif
</div>
@else
<div class="bg-white border-l-4 border-gray-500 p-4 rounded">
<p class="text-gray-700">
The order is progressing through the fulfillment pipeline.
<p class="text-gray-700 font-semibold text-lg">
Order is processing through the fulfillment pipeline
</p>
</div>
@endif
</div>
</div>
</div>
<script>
async function markReadyForCollection(orderUuid) {
if (!confirm('Mark order as ready for collection?')) {
return;
}
const button = document.querySelector('[onclick*="markReadyForCollection"]');
button.disabled = true;
button.classList.add('opacity-50');
const originalText = button.innerText;
button.innerText = '⏳ Processing...';
try {
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ||
document.querySelector('input[name="_token"]')?.value;
if (!csrfToken) {
throw new Error('CSRF token not found on page');
}
const response = await fetch(`/ops/orders/${orderUuid}/ready-for-collection`, {
method: 'POST',
headers: {
'X-CSRF-Token': csrfToken,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const data = await response.json();
if (data.success) {
alert('✓ Order moved to Awaiting Collection');
location.reload();
} else {
alert('✗ Failed:\n' + data.message);
}
} catch (error) {
alert('✗ Error: ' + error.message);
} finally {
button.disabled = false;
button.classList.remove('opacity-50');
button.innerText = originalText;
}
}
async function redownloadPdfs(orderUuid) {
if (!confirm('Re-download shipment PDFs from Shiplogic API?')) {
return;
}
const button = document.querySelector('[onclick*="redownloadPdfs"]');
button.disabled = true;
button.classList.add('opacity-50');
const originalText = button.innerText;
button.innerText = '⏳ Downloading...';
try {
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ||
document.querySelector('input[name="_token"]')?.value;
if (!csrfToken) {
throw new Error('CSRF token not found on page');
}
const response = await fetch(`/ops/orders/${orderUuid}/redownload-pdfs`, {
method: 'POST',
headers: {
'X-CSRF-Token': csrfToken,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const data = await response.json();
if (data.success) {
alert('✓ PDFs re-downloaded successfully!');
location.reload();
} else {
alert('✗ Failed to re-download PDFs:\n' + data.message);
}
} catch (error) {
alert('✗ Error: ' + error.message);
} finally {
button.disabled = false;
button.classList.remove('opacity-50');
button.innerText = originalText;
}
}
</script>
+16 -31
View File
@@ -1,54 +1,39 @@
@extends('layouts.app')
@section('content')
<div class="container mx-auto px-4 py-8">
<!-- Header -->
<div class="w-full min-h-screen bg-gray-50 px-4 py-6 sm:px-6 lg:px-8">
<!-- Mobile-friendly Header -->
<div class="mb-8">
<h1 class="text-3xl font-bold mb-2">Order {{ $order->order_number }}</h1>
<p class="text-gray-600">{{ $order->uuid }}</p>
<h1 class="text-4xl font-bold mb-2 break-words">{{ $order->order_number }}</h1>
<p class="text-gray-600 text-sm break-all">{{ $order->uuid }}</p>
</div>
<!-- Order Summary Card -->
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
<div class="grid grid-cols-1 sm:grid-cols-2 gap-6 mb-6">
<div>
<p class="text-sm text-gray-600">Status</p>
<p class="text-lg font-semibold capitalize">{{ str_replace('_', ' ', $order->status) }}</p>
<p class="text-sm text-gray-600 font-semibold">Status</p>
<p class="text-xl font-bold capitalize mt-2">{{ str_replace('_', ' ', $order->status) }}</p>
</div>
<div>
<p class="text-sm text-gray-600">Order Type</p>
<p class="text-lg font-semibold">{{ $order->is_custom_order ? 'Custom' : 'Standard' }}</p>
<p class="text-sm text-gray-600 font-semibold">Order Type</p>
<p class="text-xl font-bold mt-2">{{ $order->is_custom_order ? 'Custom' : 'Standard' }}</p>
</div>
<div>
<p class="text-sm text-gray-600">Customer</p>
<p class="text-lg font-semibold">{{ $order->user->name ?? 'N/A' }}</p>
<p class="text-sm text-gray-600 font-semibold">Customer</p>
<p class="text-xl font-bold mt-2">{{ $order->user->name ?? 'N/A' }}</p>
</div>
<div>
<p class="text-sm text-gray-600">Created</p>
<p class="text-lg font-semibold">{{ $order->created_at->format('M d, Y') }}</p>
</div>
</div>
<!-- QR Code -->
<div class="border-t pt-6">
<div class="flex items-start justify-between mb-3">
<div>
<p class="text-sm text-gray-600 mb-3">Scan to access this order:</p>
</div>
<a href="{{ route('ops.order.sticker.download', $order) }}" class="inline-flex items-center px-3 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 text-sm">
📥 Download Sticker (A6 PDF)
</a>
</div>
<div class="inline-block bg-gray-50 p-4 rounded border">
{!! file_get_contents(storage_path("app/public/qr-codes/{$order->uuid}.svg")) !!}
<p class="text-sm text-gray-600 font-semibold">Created</p>
<p class="text-xl font-bold mt-2">{{ $order->created_at->format('M d, Y') }}</p>
</div>
</div>
</div>
<!-- State-Specific Actions -->
@if($order->status === 'inspection')
@if($order->status === 'inspection' || $order->status === 'printing')
@include('ops.actions.inspection')
@elseif($order->status === 'packing' || $order->status === 'printing')
@elseif($order->status === 'packing')
@include('ops.actions.packing')
@elseif(in_array($order->status, ['ready_to_ship', 'awaiting_collection', 'in_transit']))
@include('ops.actions.read-only')
@@ -108,7 +93,7 @@
</div>
<div>
<p class="text-sm text-gray-600">Packed At</p>
<p class="text-lg font-semibold">{{ $order->packing_completed_at->format('M d, H:i') }}</p>
<p class="text-lg font-semibold">{{ $order->packing_completed_at ? $order->packing_completed_at->format('M d, H:i') : 'Not packed' }}</p>
</div>
</div>
</div>
+138
View File
@@ -0,0 +1,138 @@
<?php
/**
* Mock Shiplogic API Routes for Testing
* These routes simulate the Shiplogic API responses
* To use these routes, add to routes/web.php: include base_path('routes/shiplogic-mock.php');
*/
use Illuminate\Support\Facades\Route;
Route::prefix('api/v1/mock')->group(function () {
/**
* Mock /rates endpoint
* Returns sample service level options
*/
Route::post('/rates', function () {
return response()->json([
'id' => '550e8400-e29b-41d4-a716-446655440001',
'company_shipment_rates' => [
[
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a00',
'company_code' => 'FEDEX',
'company_name' => 'FedEx',
'service_level' => [
'id' => '123456789',
'code' => 'FEDEX_INTERNATIONAL_PRIORITY_EXPRESS',
'name' => 'International Priority Express',
'description' => 'Fastest service',
],
'rate' => 125.50,
'currency' => 'GBP',
'transit_days' => '1-2',
'delivery_guarantee_date' => '2026-01-05',
],
[
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a01',
'company_code' => 'FEDEX',
'company_name' => 'FedEx',
'service_level' => [
'id' => '123456790',
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
'name' => 'International Economy',
'description' => 'Economy service (ECO)',
],
'rate' => 45.75,
'currency' => 'GBP',
'transit_days' => '5-7',
'delivery_guarantee_date' => '2026-01-09',
],
[
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a02',
'company_code' => 'DHL',
'company_name' => 'DHL',
'service_level' => [
'id' => '123456791',
'code' => 'DHL_EXPRESS_WORLDWIDE',
'name' => 'Express Worldwide',
'description' => 'Standard express',
],
'rate' => 95.25,
'currency' => 'GBP',
'transit_days' => '2-3',
'delivery_guarantee_date' => '2026-01-06',
],
],
]);
});
/**
* Mock /shipments endpoint
* Returns created shipment details
*/
Route::post('/shipments', function () {
return response()->json([
'id' => '550e8400-e29b-41d4-a716-446655440002',
'short_tracking_reference' => 'SHP123456789',
'tracking_reference' => 'SHP-123456789-ABC',
'customer_reference' => 'ORDER-12345',
'company_code' => 'FEDEX',
'service_level' => [
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
'name' => 'International Economy',
],
'collection_min_date' => '2026-01-04',
'delivery_min_date' => '2026-01-09',
'status' => 'created',
'created_at' => now()->toIso8601String(),
]);
});
/**
* Mock /shipments/label endpoint (waybill/shipping label)
* Returns PDF binary data
*/
Route::get('/shipments/label', function () {
// Return a minimal PDF (you can replace with a real PDF file)
$pdf = $this->generateMockPdf('Shipment Label');
return response($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="label.pdf"',
]);
});
/**
* Mock /shipments/label/stickers endpoint
* Returns PDF with sticker labels
*/
Route::get('/shipments/label/stickers', function () {
// Return a minimal PDF (you can replace with a real PDF file)
$pdf = $this->generateMockPdf('Shipment Sticker');
return response($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="stickers.pdf"',
]);
});
});
/**
* Generate a minimal valid PDF for testing
* This is a very basic PDF structure that opens in most readers
*/
if (! function_exists('generateMockPdf')) {
function generateMockPdf($title = 'Document')
{
$pdf = "%PDF-1.4\n";
$pdf .= "1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n";
$pdf .= "2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n";
$pdf .= "3 0 obj\n<< /Type /Page /Parent 2 0 R /Resources << /Font << /F1 4 0 R >> >> /MediaBox [0 0 612 792] /Contents 5 0 R >>\nendobj\n";
$pdf .= "4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>\nendobj\n";
$pdf .= "5 0 obj\n<< /Length 44 >>\nstream\nBT\n/F1 12 Tf\n100 700 Td\n({$title}) Tj\nET\nendstream\nendobj\n";
$pdf .= "xref\n0 6\n0000000000 65535 f\n0000000009 00000 n\n0000000058 00000 n\n0000000115 00000 n\n0000000273 00000 n\n0000000352 00000 n\n";
$pdf .= "trailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n446\n%%EOF";
return $pdf;
}
}
+2
View File
@@ -78,6 +78,8 @@ Route::middleware('auth')->group(function () {
Route::post('/ops/orders/{order:uuid}/inspection-passed', [OpsController::class, 'markInspectionPassed'])->name('ops.order.inspection-passed');
Route::post('/ops/orders/{order:uuid}/inspection-failed', [OpsController::class, 'flagInspectionIssue'])->name('ops.order.inspection-failed');
Route::get('/ops/orders/{order:uuid}/sticker/download', [OpsController::class, 'downloadSticker'])->name('ops.order.sticker.download');
Route::post('/ops/orders/{order:uuid}/redownload-pdfs', [OpsController::class, 'redownloadShipmentPdfs'])->name('ops.order.redownload-pdfs');
Route::post('/ops/orders/{order:uuid}/ready-for-collection', [OpsController::class, 'markReadyForCollection'])->name('ops.order.ready-for-collection');
Route::post('/custom-orders/{customOrder:uuid}/ship', [ShippingController::class, 'createShipment'])->name('custom-orders.ship');
});
@@ -0,0 +1,49 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'circular' => true,
'size' => 'md',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'circular' => true,
'size' => 'md',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<img
<?php echo e($attributes
->class([
'fi-avatar',
'fi-circular' => $circular,
match ($size) {
'sm', 'md', 'lg' => "fi-size-{$size}",
default => $size,
},
])); ?>
/>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/avatar.blade.php ENDPATH**/ ?>
@@ -0,0 +1,46 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'columnSpan' => [],
'columnStart' => [],
'height' => null,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'columnSpan' => [],
'columnStart' => [],
'height' => null,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<div
<?php echo e(($attributes ?? new \Illuminate\View\ComponentAttributeBag)
->gridColumn($columnSpan, $columnStart)
->class(['fi-section fi-loading-section'])
->style(['height: ' . ($height ?? '8rem')])); ?>
></div>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/loading-section.blade.php ENDPATH**/ ?>
@@ -0,0 +1,5 @@
<div <?php echo e($attributes->class(['fi-dropdown-list'])); ?>>
<?php echo e($slot); ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/dropdown/list/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,124 @@
<?php
use Illuminate\View\ComponentAttributeBag;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'debounce' => '500ms',
'onBlur' => false,
'placeholder' => __('filament-tables::table.fields.search.placeholder'),
'wireModel' => 'tableSearch',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'debounce' => '500ms',
'onBlur' => false,
'placeholder' => __('filament-tables::table.fields.search.placeholder'),
'wireModel' => 'tableSearch',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
$wireModelAttribute = $onBlur ? 'wire:model.blur' : "wire:model.live.debounce.{$debounce}";
?>
<div
x-id="['input']"
<?php echo e($attributes->class(['fi-ta-search-field'])); ?>
>
<label x-bind:for="$id('input')" class="fi-sr-only">
<?php echo e(__('filament-tables::table.fields.search.label')); ?>
</label>
<?php if (isset($component)) { $__componentOriginal505efd9768415fdb4543e8c564dad437 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal505efd9768415fdb4543e8c564dad437 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.wrapper','data' => ['inlinePrefix' => true,'prefixIcon' => \Filament\Support\Icons\Heroicon::MagnifyingGlass,'prefixIconAlias' => \Filament\Tables\View\TablesIconAlias::SEARCH_FIELD,'wire:target' => $wireModel]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::input.wrapper'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['inline-prefix' => true,'prefix-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::MagnifyingGlass),'prefix-icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Tables\View\TablesIconAlias::SEARCH_FIELD),'wire:target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($wireModel)]); ?>
<?php if (isset($component)) { $__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.index','data' => ['attributes' =>
(new ComponentAttributeBag)->merge([
'autocomplete' => 'off',
'inlinePrefix' => true,
'maxlength' => 1000,
'placeholder' => $placeholder,
'type' => 'search',
'wire:key' => $this->getId() . '.table.' . $wireModel . '.field.input',
$wireModelAttribute => $wireModel,
'x-bind:id' => '$id(\'input\')',
'x-on:keyup' => 'if ($event.key === \'Enter\') { $wire.$refresh() }',
], escape: false)
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::input'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
(new ComponentAttributeBag)->merge([
'autocomplete' => 'off',
'inlinePrefix' => true,
'maxlength' => 1000,
'placeholder' => $placeholder,
'type' => 'search',
'wire:key' => $this->getId() . '.table.' . $wireModel . '.field.input',
$wireModelAttribute => $wireModel,
'x-bind:id' => '$id(\'input\')',
'x-on:keyup' => 'if ($event.key === \'Enter\') { $wire.$refresh() }',
], escape: false)
)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e)): ?>
<?php $attributes = $__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e; ?>
<?php unset($__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e)): ?>
<?php $component = $__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e; ?>
<?php unset($__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e); ?>
<?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal505efd9768415fdb4543e8c564dad437)): ?>
<?php $attributes = $__attributesOriginal505efd9768415fdb4543e8c564dad437; ?>
<?php unset($__attributesOriginal505efd9768415fdb4543e8c564dad437); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal505efd9768415fdb4543e8c564dad437)): ?>
<?php $component = $__componentOriginal505efd9768415fdb4543e8c564dad437; ?>
<?php unset($__componentOriginal505efd9768415fdb4543e8c564dad437); ?>
<?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/tables/resources/views/components/search-field.blade.php ENDPATH**/ ?>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,225 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'livewire' => null,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'livewire' => null,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
$renderHookScopes = $livewire?->getRenderHookScopes();
?>
<!DOCTYPE html>
<html
lang="<?php echo e(str_replace('_', '-', app()->getLocale())); ?>"
dir="<?php echo e(__('filament-panels::layout.direction') ?? 'ltr'); ?>"
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi',
'dark' => filament()->hasDarkModeForced(),
]); ?>"
>
<head>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::HEAD_START, scopes: $renderHookScopes)); ?>
<meta charset="utf-8" />
<meta name="csrf-token" content="<?php echo e(csrf_token()); ?>" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($favicon = filament()->getFavicon()): ?>
<link rel="icon" href="<?php echo e($favicon); ?>" />
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php
$title = trim(strip_tags($livewire?->getTitle() ?? ''));
$brandName = trim(strip_tags(filament()->getBrandName()));
?>
<title>
<?php echo e(filled($title) ? $title : null); ?>
<?php echo e(filled($brandName) && filled($title) ? ' - ' : null); ?>
<?php echo e(filled($brandName) ? $brandName : null); ?>
</title>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::STYLES_BEFORE, scopes: $renderHookScopes)); ?>
<style>
[x-cloak=''],
[x-cloak='x-cloak'],
[x-cloak='1'] {
display: none !important;
}
[x-cloak='inline-flex'] {
display: inline-flex !important;
}
@media (max-width: 1023px) {
[x-cloak='-lg'] {
display: none !important;
}
}
@media (min-width: 1024px) {
[x-cloak='lg'] {
display: none !important;
}
}
</style>
<?php echo \Filament\Support\Facades\FilamentAsset::renderStyles() ?>
<?php echo e(filament()->getTheme()->getHtml()); ?>
<?php echo e(filament()->getFontHtml()); ?>
<?php echo e(filament()->getMonoFontHtml()); ?>
<?php echo e(filament()->getSerifFontHtml()); ?>
<style>
:root {
--font-family: '<?php echo filament()->getFontFamily(); ?>';
--mono-font-family: '<?php echo filament()->getMonoFontFamily(); ?>';
--serif-font-family: '<?php echo filament()->getSerifFontFamily(); ?>';
--sidebar-width: <?php echo e(filament()->getSidebarWidth()); ?>;
--collapsed-sidebar-width: <?php echo e(filament()->getCollapsedSidebarWidth()); ?>;
--default-theme-mode: <?php echo e(filament()->getDefaultThemeMode()->value); ?>;
}
</style>
<?php echo $__env->yieldPushContent('styles'); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::STYLES_AFTER, scopes: $renderHookScopes)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! filament()->hasDarkMode()): ?>
<script>
localStorage.setItem('theme', 'light')
</script>
<?php elseif(filament()->hasDarkModeForced()): ?>
<script>
localStorage.setItem('theme', 'dark')
</script>
<?php else: ?>
<script>
const loadDarkMode = () => {
window.theme = localStorage.getItem('theme') ?? <?php echo \Illuminate\Support\Js::from(filament()->getDefaultThemeMode()->value)->toHtml() ?>
if (
window.theme === 'dark' ||
(window.theme === 'system' &&
window.matchMedia('(prefers-color-scheme: dark)')
.matches)
) {
document.documentElement.classList.add('dark')
}
}
loadDarkMode()
document.addEventListener('livewire:navigated', loadDarkMode)
</script>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::HEAD_END, scopes: $renderHookScopes)); ?>
</head>
<body
<?php echo e($attributes
->merge($livewire?->getExtraBodyAttributes() ?? [], escape: false)
->class([
'fi-body',
'fi-panel-' . filament()->getId(),
])); ?>
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::BODY_START, scopes: $renderHookScopes)); ?>
<?php echo e($slot); ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(Filament\Livewire\Notifications::class);
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-3970403317-0', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SCRIPTS_BEFORE, scopes: $renderHookScopes)); ?>
<?php echo \Filament\Support\Facades\FilamentAsset::renderScripts(withCore: true) ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasBroadcasting() && config('filament.broadcasting.echo')): ?>
<script data-navigate-once>
window.Echo = new window.EchoFactory(<?php echo \Illuminate\Support\Js::from(config('filament.broadcasting.echo'))->toHtml() ?>)
window.dispatchEvent(new CustomEvent('EchoLoaded'))
</script>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(filament()->hasDarkMode() && (! filament()->hasDarkModeForced())): ?>
<script>
loadDarkMode()
</script>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->yieldPushContent('scripts'); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SCRIPTS_AFTER, scopes: $renderHookScopes)); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::BODY_END, scopes: $renderHookScopes)); ?>
</body>
</html>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/layout/base.blade.php ENDPATH**/ ?>
@@ -0,0 +1,96 @@
<?php
use Filament\Support\Enums\IconPosition;
use Filament\Widgets\View\Components\StatsOverviewWidgetComponent\StatComponent\DescriptionComponent;
use Filament\Widgets\View\Components\StatsOverviewWidgetComponent\StatComponent\StatsOverviewWidgetStatChartComponent;
use Illuminate\View\ComponentAttributeBag;
$chartColor = $getChartColor() ?? 'gray';
$descriptionColor = $getDescriptionColor() ?? 'gray';
$descriptionIcon = $getDescriptionIcon();
$descriptionIconPosition = $getDescriptionIconPosition();
$url = $getUrl();
$tag = $url ? 'a' : 'div';
$chartDataChecksum = $generateChartDataChecksum();
?>
<<?php echo $tag; ?>
<?php if($url): ?>
<?php echo e(\Filament\Support\generate_href_html($url, $shouldOpenUrlInNewTab())); ?>
<?php endif; ?>
<?php echo e($getExtraAttributeBag()
->class([
'fi-wi-stats-overview-stat',
])); ?>
>
<div class="fi-wi-stats-overview-stat-content">
<div class="fi-wi-stats-overview-stat-label-ctn">
<?php echo e(\Filament\Support\generate_icon_html($getIcon())); ?>
<span class="fi-wi-stats-overview-stat-label">
<?php echo e($getLabel()); ?>
</span>
</div>
<div class="fi-wi-stats-overview-stat-value">
<?php echo e($getValue()); ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($description = $getDescription()): ?>
<div
<?php echo e((new ComponentAttributeBag)->color(DescriptionComponent::class, $descriptionColor)->class(['fi-wi-stats-overview-stat-description'])); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($descriptionIcon && in_array($descriptionIconPosition, [IconPosition::Before, 'before'])): ?>
<?php echo e(\Filament\Support\generate_icon_html($descriptionIcon, attributes: (new \Illuminate\View\ComponentAttributeBag))); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<span>
<?php echo e($description); ?>
</span>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($descriptionIcon && in_array($descriptionIconPosition, [IconPosition::After, 'after'])): ?>
<?php echo e(\Filament\Support\generate_icon_html($descriptionIcon, attributes: (new \Illuminate\View\ComponentAttributeBag))); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($chart = $getChart()): ?>
<div x-data="{ statsOverviewStatChart() {} }">
<div
x-load
x-load-src="<?php echo e(\Filament\Support\Facades\FilamentAsset::getAlpineComponentSrc('stats-overview/stat/chart', 'filament/widgets')); ?>"
x-data="statsOverviewStatChart({
dataChecksum: <?php echo \Illuminate\Support\Js::from($chartDataChecksum)->toHtml() ?>,
labels: <?php echo \Illuminate\Support\Js::from(array_keys($chart))->toHtml() ?>,
values: <?php echo \Illuminate\Support\Js::from(array_values($chart))->toHtml() ?>,
})"
<?php echo e((new ComponentAttributeBag)->color(StatsOverviewWidgetStatChartComponent::class, $chartColor)->class(['fi-wi-stats-overview-stat-chart'])); ?>
>
<canvas x-ref="canvas"></canvas>
<span
x-ref="backgroundColorElement"
class="fi-wi-stats-overview-stat-chart-bg-color"
></span>
<span
x-ref="borderColorElement"
class="fi-wi-stats-overview-stat-chart-border-color"
></span>
</div>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</<?php echo $tag; ?>>
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/stats-overview-widget/stat.blade.php ENDPATH**/ ?>
@@ -0,0 +1,424 @@
<?php $__env->startSection('title', 'Order #' . $customOrder->order_number . ' - Custom Order Details'); ?>
<?php $__env->startSection('styles'); ?>
<style>
/* Page-specific typography overrides */
h1 {
font-family: 'Abril Fatface', cursive;
font-size: 2.5rem;
color: var(--text-primary);
margin-bottom: 0.5rem;
}
h2 {
font-family: 'Abril Fatface', cursive;
font-size: 1.6rem;
color: var(--text-primary);
margin-bottom: var(--spacing-md);
}
h3 {
font-family: var(--font-sans);
font-size: 1.1rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.5rem;
}
.page-intro {
margin-bottom: var(--spacing-lg);
}
.page-intro p {
color: var(--text-secondary);
font-size: 1rem;
}
/* Timeline-specific styles */
.timeline-container {
margin-bottom: var(--spacing-lg);
}
.timeline-container.card:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.timeline-title {
font-family: var(--font-serif);
font-size: 1.3rem;
color: var(--text-primary);
margin-bottom: var(--spacing-lg);
text-align: center;
}
.timeline {
display: flex;
align-items: center;
gap: 0;
position: relative;
overflow-x: auto;
padding: var(--spacing-md) 0;
}
.timeline::before {
content: '';
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 2px;
background-color: var(--border-color);
z-index: 1;
transform: translateY(-50%);
}
.timeline-item {
flex: 1;
min-width: 140px;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
z-index: 2;
}
.timeline-circle {
width: 40px;
height: 40px;
border-radius: 50%;
background-color: white;
border: 3px solid var(--border-color);
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
font-weight: 900;
font-size: 1.2rem;
color: var(--text-primary);
flex-shrink: 0;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: 0;
}
.timeline-item.completed .timeline-circle {
background-color: var(--accent-pink);
border-color: var(--accent-pink);
color: white;
}
.timeline-item.active .timeline-circle {
background-color: var(--accent-light);
border-color: var(--accent-dark);
box-shadow: 0 0 0 4px var(--accent-light);
}
.timeline-label {
text-align: center;
font-size: 0.85rem;
font-weight: 600;
color: var(--text-primary);
line-height: 1.3;
max-width: 120px;
margin-top: 60px;
}
.timeline-item.completed .timeline-label {
color: var(--accent-pink);
}
.timeline-item.active .timeline-label {
color: var(--accent-dark);
font-weight: 700;
}
@media (max-width: 768px) {
.content-grid {
grid-template-columns: 1fr;
}
h1 {
font-size: 1.8rem;
}
.image-gallery {
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}
}
</style>
<?php $__env->stopSection(); ?>
<?php $__env->startSection('content'); ?>
<div class="container">
<div class="page-intro">
<h1>Custom Order Details</h1>
<p>Order #<?php echo e($customOrder->order_number); ?></p>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('success')): ?>
<div class="alert alert-success">
<?php echo e(session('success')); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('info')): ?>
<div class="alert alert-info">
<?php echo e(session('info')); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Timeline -->
<div class="timeline-container card">
<h2 class="timeline-title">Order Progress</h2>
<div class="timeline">
<?php
$timelineSteps = [
['status' => 'submitted', 'label' => 'Order\nSubmitted', 'completed' => $customOrder->status !== null],
['status' => 'deposit_paid', 'label' => 'Deposit\nPaid', 'completed' => $customOrder->deposit_status === 'paid'],
['status' => 'proof_sent', 'label' => 'Proofs\nSent', 'completed' => $customOrder->proofs()->exists()],
['status' => 'proof_approved', 'label' => 'Proofs\nApproved', 'completed' => $customOrder->proofs()->where('status', 'approved')->exists()],
['status' => 'processing', 'label' => 'Processing', 'completed' => $customOrder->status === 'processing'],
['status' => 'shipped', 'label' => 'Order\nShipped', 'completed' => $customOrder->status === 'completed'],
];
// Determine current step
$currentStep = 0;
if ($customOrder->status === 'completed') $currentStep = 5;
elseif ($customOrder->status === 'processing') $currentStep = 4;
elseif ($customOrder->proofs()->where('status', 'approved')->exists()) $currentStep = 3;
elseif ($customOrder->proofs()->exists()) $currentStep = 2;
elseif ($customOrder->deposit_status === 'paid') $currentStep = 1;
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $timelineSteps; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $index => $step): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<div class="timeline-item <?php if($index < $currentStep): ?> completed <?php elseif($index === $currentStep): ?> active <?php endif; ?>">
<div class="timeline-circle">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($index < $currentStep): ?>
<?php else: ?>
<?php echo e($index + 1); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="timeline-label"><?php echo e($step['label']); ?></div>
</div>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
<div class="content-grid">
<!-- Main Content -->
<div>
<!-- Order Status -->
<div class="card">
<h2>Order Status</h2>
<div class="card-section">
<span class="status-badge <?php echo e($customOrder->status); ?>">
<?php echo e(str_replace('_', ' ', ucfirst($customOrder->status))); ?>
</span>
<p style="margin-top: var(--spacing-sm); color: var(--text-secondary); font-size: 0.9rem;">
Submitted on <?php echo e($customOrder->created_at->format('d M Y \a\t H:i')); ?>
</p>
</div>
</div>
<!-- Design Requirements -->
<div class="card">
<h2>Design Requirements</h2>
<div class="card-section">
<h3>Order Type</h3>
<p style="color: var(--text-secondary); text-transform: capitalize;"><?php echo e($customOrder->type); ?></p>
</div>
<div class="card-section">
<h3>Dimensions</h3>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications): ?>
<dl style="color: var(--text-secondary);">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->length): ?>
<div class="spec-group">
<dt>Length:</dt>
<dd><?php echo e($customOrder->specifications->length); ?>m</dd>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->width): ?>
<div class="spec-group">
<dt>Width:</dt>
<dd><?php echo e($customOrder->specifications->width); ?>m</dd>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->height): ?>
<div class="spec-group">
<dt>Height:</dt>
<dd><?php echo e($customOrder->specifications->height); ?>m</dd>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="spec-group">
<dt>Quantity:</dt>
<dd><?php echo e($customOrder->specifications->quantity); ?></dd>
</div>
</dl>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="card-section">
<h3>Print Material</h3>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->printStock): ?>
<p style="color: var(--text-secondary);"><?php echo e($customOrder->specifications->printStock->name); ?></p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="card-section">
<h3>Design Brief</h3>
<p style="color: var(--text-secondary);"><?php echo e($customOrder->customer_brief); ?></p>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->special_instructions): ?>
<div class="card-section">
<h3>Special Instructions</h3>
<p style="color: var(--text-secondary);"><?php echo e($customOrder->specifications->special_instructions); ?></p>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<!-- Reference Images -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->files->count() > 0): ?>
<div class="card">
<h2>Reference Images</h2>
<div class="image-gallery">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $customOrder->files; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $file): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<a href="<?php echo e(Storage::url($file->file_path)); ?>" target="_blank" title="<?php echo e($file->original_filename); ?>">
<img src="<?php echo e(Storage::url($file->file_path)); ?>" alt="<?php echo e($file->original_filename); ?>">
</a>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Design Proofs -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->proofs->count() > 0): ?>
<div class="card">
<h2>Design Proofs</h2>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $customOrder->proofs; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $proof): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<div class="proof-item <?php echo e($proof->status === 'approved' ? 'approved' : ''); ?>">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-sm);">
<h3>Proof <?php echo e($loop->iteration); ?></h3>
<span class="status-badge <?php echo e($proof->status); ?>">
<?php echo e(ucfirst($proof->status)); ?>
</span>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($proof->file_path): ?>
<a href="<?php echo e(Storage::url($proof->file_path)); ?>" target="_blank" style="color: var(--accent-dark); text-decoration: underline; font-size: 0.9rem;">
View Proof File
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($proof->feedback): ?>
<div style="margin-top: var(--spacing-sm); padding: var(--spacing-sm); background: white; border-radius: 4px; border-left: 3px solid var(--accent-dark);">
<strong style="color: var(--text-primary); font-size: 0.9rem;">Feedback:</strong>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: var(--spacing-xs) 0 0 0;"><?php echo e($proof->feedback); ?></p>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<!-- Sidebar -->
<div>
<!-- Cost & Payment Summary -->
<div class="card">
<h2>Order Summary</h2>
<!-- Cost Summary -->
<div class="payment-section">
<div class="payment-row">
<span>Design Fee:</span>
<span>R<?php echo e(number_format($customOrder->design_fee, 2)); ?></span>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->material_cost > 0): ?>
<div class="payment-row">
<span>Material Cost:</span>
<span>R<?php echo e(number_format($customOrder->material_cost, 2)); ?></span>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="payment-row total">
<span>Total:</span>
<span>R<?php echo e(number_format($customOrder->total_cost, 2)); ?></span>
</div>
</div>
<!-- Payment Status -->
<h3 style="margin-top: var(--spacing-lg); margin-bottom: var(--spacing-md);">Payment Status</h3>
<div class="card" style="padding: var(--spacing-sm); background-color: var(--accent-light); margin-bottom: var(--spacing-md);">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xs);">
<strong>Deposit (20%)</strong>
<span class="status-badge <?php echo e($customOrder->deposit_status); ?>"><?php echo e(ucfirst($customOrder->deposit_status)); ?></span>
</div>
<p style="color: var(--text-secondary); margin: 0; font-size: 0.9rem;">R<?php echo e(number_format($customOrder->deposit_amount, 2)); ?></p>
</div>
<div class="card" style="padding: var(--spacing-sm); background-color: var(--accent-light); margin-bottom: var(--spacing-lg);">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xs);">
<strong>Balance (80%)</strong>
<span class="status-badge <?php echo e($customOrder->balance_status); ?>"><?php echo e(ucfirst($customOrder->balance_status)); ?></span>
</div>
<p style="color: var(--text-secondary); margin: 0; font-size: 0.9rem;">R<?php echo e(number_format($customOrder->balance_amount, 2)); ?></p>
</div>
<!-- Payment Buttons -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->deposit_status !== 'paid'): ?>
<form method="POST" action="<?php echo e(route('yoco-custom-deposit')); ?>">
<?php echo csrf_field(); ?>
<input type="hidden" name="custom_order_id" value="<?php echo e($customOrder->id); ?>">
<button type="submit" class="btn">Pay Deposit (R<?php echo e(number_format($customOrder->deposit_amount, 2)); ?>)</button>
</form>
<?php elseif($customOrder->deposit_status === 'paid' && $customOrder->proofs->where('status', 'approved')->count() > 0 && $customOrder->balance_status !== 'paid'): ?>
<button class="btn" onclick="alert('Balance payment coming soon')">Pay Balance (R<?php echo e(number_format($customOrder->balance_amount, 2)); ?>)</button>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<!-- Terms -->
<div class="terms-box card--pink">
<h3 style="color: var(--text-primary); margin-top: 0;">Payment Terms</h3>
<ul>
<li>The 20% deposit is non-refundable</li>
<li>Balance of 80% must be paid before printing begins</li>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->library_discount_applied): ?>
<li>Design may be added to our library</li>
<?php else: ?>
<li>Bespoke, exclusive design</li>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</ul>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const paymentForm = document.querySelector('form[action*="payment"]');
if (paymentForm) {
console.log('Payment form found:', paymentForm);
console.log('Form action:', paymentForm.action);
paymentForm.addEventListener('submit', function(e) {
console.log('Payment form submitted!');
console.log('Form data:', new FormData(this));
});
} else {
console.log('Payment form NOT found');
console.log('All forms on page:', document.querySelectorAll('form'));
}
});
</script>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/custom-orders/show.blade.php ENDPATH**/ ?>
@@ -0,0 +1,17 @@
<?php $layout->viewContext->mergeIntoNewEnvironment($__env); ?>
<?php $__env->startComponent($layout->view, $layout->params); ?>
<?php $__env->slot($layout->slotOrSection); ?>
<?php echo $content; ?>
<?php $__env->endSlot(); ?>
<?php
// Manually forward slots defined in the Livewire template into the layout component...
foreach ($layout->viewContext->slots[-1] ?? [] as $name => $slot) {
$__env->slot($name, attributes: $slot->attributes->getAttributes());
echo $slot->toHtml();
$__env->endSlot();
}
?>
<?php echo $__env->renderComponent(); ?><?php /**PATH /var/www/additional_design/storage/framework/views/4943bc92ebba41e8b0e508149542e0ad.blade.php ENDPATH**/ ?>
@@ -0,0 +1,141 @@
<?php $__env->startSection('content'); ?>
<div class="container mx-auto px-4 py-8">
<!-- Header -->
<div class="mb-8">
<h1 class="text-3xl font-bold mb-2">Order <?php echo e($order->order_number); ?></h1>
<p class="text-gray-600"><?php echo e($order->uuid); ?></p>
</div>
<!-- Order Summary Card -->
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
<div>
<p class="text-sm text-gray-600">Status</p>
<p class="text-lg font-semibold capitalize"><?php echo e(str_replace('_', ' ', $order->status)); ?></p>
</div>
<div>
<p class="text-sm text-gray-600">Order Type</p>
<p class="text-lg font-semibold"><?php echo e($order->is_custom_order ? 'Custom' : 'Standard'); ?></p>
</div>
<div>
<p class="text-sm text-gray-600">Customer</p>
<p class="text-lg font-semibold"><?php echo e($order->user->name ?? 'N/A'); ?></p>
</div>
<div>
<p class="text-sm text-gray-600">Created</p>
<p class="text-lg font-semibold"><?php echo e($order->created_at->format('M d, Y')); ?></p>
</div>
</div>
<!-- QR Code -->
<div class="border-t pt-6">
<div class="flex items-start justify-between mb-3">
<div>
<p class="text-sm text-gray-600 mb-3">Scan to access this order:</p>
</div>
<a href="<?php echo e(route('ops.order.sticker.download', $order)); ?>" class="inline-flex items-center px-3 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 text-sm">
📥 Download Sticker (A6 PDF)
</a>
</div>
<div class="inline-block bg-gray-50 p-4 rounded border">
<?php echo file_get_contents(storage_path("app/public/qr-codes/{$order->uuid}.svg")); ?>
</div>
</div>
</div>
<!-- State-Specific Actions -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->status === 'inspection'): ?>
<?php echo $__env->make('ops.actions.inspection', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
<?php elseif($order->status === 'packing' || $order->status === 'printing'): ?>
<?php echo $__env->make('ops.actions.packing', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
<?php elseif(in_array($order->status, ['ready_to_ship', 'awaiting_collection', 'in_transit'])): ?>
<?php echo $__env->make('ops.actions.read-only', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
<?php else: ?>
<div class="bg-yellow-50 border border-yellow-200 rounded-lg p-4">
<p class="text-yellow-800">No actions available for this order status.</p>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Order Items -->
<div class="mt-8 bg-white rounded-lg shadow-md p-6">
<h2 class="text-2xl font-bold mb-4">Order Items</h2>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="border-b">
<th class="text-left py-3 px-4">Product</th>
<th class="text-left py-3 px-4">Type</th>
<th class="text-left py-3 px-4">Quantity</th>
<th class="text-left py-3 px-4">Amount</th>
</tr>
</thead>
<tbody>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__empty_1 = true; $__currentLoopData = $order->items; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
<tr class="border-b hover:bg-gray-50">
<td class="py-3 px-4"><?php echo e($item->product->name ?? 'N/A'); ?></td>
<td class="py-3 px-4"><?php echo e($item->product_type ?? 'N/A'); ?></td>
<td class="py-3 px-4"><?php echo e($item->quantity); ?></td>
<td class="py-3 px-4">R<?php echo e(number_format($item->unit_price * $item->quantity, 2)); ?></td>
</tr>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
<tr>
<td colspan="4" class="py-3 px-4 text-center text-gray-500">No items</td>
</tr>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</tbody>
</table>
</div>
</div>
<!-- Packing Details (if available) -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->packing_completed_at): ?>
<div class="mt-8 bg-white rounded-lg shadow-md p-6">
<h2 class="text-2xl font-bold mb-4">Packing Details</h2>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
<div>
<p class="text-sm text-gray-600">Width</p>
<p class="text-lg font-semibold"><?php echo e($order->packing_width); ?> cm</p>
</div>
<div>
<p class="text-sm text-gray-600">Length</p>
<p class="text-lg font-semibold"><?php echo e($order->packing_length); ?> cm</p>
</div>
<div>
<p class="text-sm text-gray-600">Weight</p>
<p class="text-lg font-semibold"><?php echo e($order->packing_weight); ?> kg</p>
</div>
<div>
<p class="text-sm text-gray-600">Packed At</p>
<p class="text-lg font-semibold"><?php echo e($order->packing_completed_at ? $order->packing_completed_at->format('M d, H:i') : 'Not packed'); ?></p>
</div>
</div>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Shipment Details (if available) -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_waybill_id): ?>
<div class="mt-8 bg-white rounded-lg shadow-md p-6">
<h2 class="text-2xl font-bold mb-4">Shipment Details</h2>
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
<div>
<p class="text-sm text-gray-600">Waybill ID</p>
<p class="text-lg font-semibold font-mono"><?php echo e($order->courier_waybill_id); ?></p>
</div>
<div>
<p class="text-sm text-gray-600">Tracking Number</p>
<p class="text-lg font-semibold font-mono"><?php echo e($order->courier_tracking_number ?? 'N/A'); ?></p>
</div>
<div>
<p class="text-sm text-gray-600">Status</p>
<p class="text-lg font-semibold capitalize"><?php echo e(str_replace('_', ' ', $order->courier_status ?? 'pending')); ?></p>
</div>
</div>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/ops/order-detail.blade.php ENDPATH**/ ?>
@@ -0,0 +1,198 @@
<?php
use Filament\Support\Enums\Width;
$livewire ??= null;
$hasTopbar = filament()->hasTopbar();
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
$hasTopNavigation = filament()->hasTopNavigation();
$hasNavigation = filament()->hasNavigation();
$renderHookScopes = $livewire?->getRenderHookScopes();
$maxContentWidth ??= (filament()->getMaxContentWidth() ?? Width::SevenExtraLarge);
if (is_string($maxContentWidth)) {
$maxContentWidth = Width::tryFrom($maxContentWidth) ?? $maxContentWidth;
}
?>
<?php if (isset($component)) { $__componentOriginale960ae7ad1b1ce9e3596e483505fadc9 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.layout.base','data' => ['livewire' => $livewire,'class' => \Illuminate\Support\Arr::toCssClasses([
'fi-body-has-navigation' => $hasNavigation,
'fi-body-has-sidebar-collapsible-on-desktop' => $isSidebarCollapsibleOnDesktop,
'fi-body-has-sidebar-fully-collapsible-on-desktop' => $isSidebarFullyCollapsibleOnDesktop,
'fi-body-has-topbar' => $hasTopbar,
'fi-body-has-top-navigation' => $hasTopNavigation,
])]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::layout.base'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['livewire' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($livewire),'class' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Illuminate\Support\Arr::toCssClasses([
'fi-body-has-navigation' => $hasNavigation,
'fi-body-has-sidebar-collapsible-on-desktop' => $isSidebarCollapsibleOnDesktop,
'fi-body-has-sidebar-fully-collapsible-on-desktop' => $isSidebarFullyCollapsibleOnDesktop,
'fi-body-has-topbar' => $hasTopbar,
'fi-body-has-top-navigation' => $hasTopNavigation,
]))]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasTopbar): ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_BEFORE, scopes: $renderHookScopes)); ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(filament()->getTopbarLivewireComponent());
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1155085427-0', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_AFTER, scopes: $renderHookScopes)); ?>
<?php elseif($hasNavigation): ?>
<div
<?php if($isSidebarFullyCollapsibleOnDesktop): ?>
x-data="{}"
x-bind:class="{ 'lg:fi-hidden': $store.sidebar.isOpen }"
<?php endif; ?>
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-layout-sidebar-toggle-btn-ctn',
'lg:fi-hidden' => ! $isSidebarFullyCollapsibleOnDesktop,
]); ?>"
>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::OutlinedBars3,'iconAlias' => \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','class' => 'fi-layout-sidebar-toggle-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::OutlinedBars3),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','class' => 'fi-layout-sidebar-toggle-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="fi-layout">
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::LAYOUT_START, scopes: $renderHookScopes)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasNavigation): ?>
<div
x-cloak
x-data="{}"
x-on:click="$store.sidebar.close()"
x-show="$store.sidebar.isOpen"
x-transition.opacity.300ms
class="fi-sidebar-close-overlay"
></div>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(filament()->getSidebarLivewireComponent());
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1155085427-1', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div
<?php if($isSidebarCollapsibleOnDesktop): ?>
x-data="{}"
x-bind:class="{
'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,
}"
x-bind:style="'display: flex; opacity:1;'"
<?php elseif($isSidebarFullyCollapsibleOnDesktop): ?>
x-data="{}"
x-bind:class="{
'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,
}"
x-bind:style="'display: flex; opacity:1;'"
<?php elseif(! ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop || $hasTopNavigation || (! $hasNavigation))): ?>
x-data="{}"
x-bind:style="'display: flex; opacity:1;'"
<?php endif; ?>
class="fi-main-ctn"
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_BEFORE, scopes: $renderHookScopes)); ?>
<main
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-main',
($maxContentWidth instanceof Width) ? "fi-width-{$maxContentWidth->value}" : $maxContentWidth,
]); ?>"
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_START, scopes: $renderHookScopes)); ?>
<?php echo e($slot); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_END, scopes: $renderHookScopes)); ?>
</main>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_AFTER, scopes: $renderHookScopes)); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::FOOTER, scopes: $renderHookScopes)); ?>
</div>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::LAYOUT_END, scopes: $renderHookScopes)); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9)): ?>
<?php $attributes = $__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9; ?>
<?php unset($__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9); ?>
<?php endif; ?>
<?php if (isset($__componentOriginale960ae7ad1b1ce9e3596e483505fadc9)): ?>
<?php $component = $__componentOriginale960ae7ad1b1ce9e3596e483505fadc9; ?>
<?php unset($__componentOriginale960ae7ad1b1ce9e3596e483505fadc9); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/layout/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,65 @@
<?php
$brandName = filament()->getBrandName();
$brandLogo = filament()->getBrandLogo();
$brandLogoHeight = filament()->getBrandLogoHeight() ?? '1.5rem';
$darkModeBrandLogo = filament()->getDarkModeBrandLogo();
$hasDarkModeBrandLogo = filled($darkModeBrandLogo);
$getLogoClasses = fn (bool $isDarkMode): string => \Illuminate\Support\Arr::toCssClasses([
'fi-logo',
'fi-logo-light' => $hasDarkModeBrandLogo && (! $isDarkMode),
'fi-logo-dark' => $isDarkMode,
]);
$logoStyles = "height: {$brandLogoHeight}";
?>
<?php $content = (function ($args) {
return function ($logo, $isDarkMode = false) use ($args) {
extract($args, EXTR_SKIP);
ob_start(); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($logo instanceof \Illuminate\Contracts\Support\Htmlable): ?>
<div
<?php echo e($attributes
->class([$getLogoClasses($isDarkMode)])
->style([$logoStyles])); ?>
>
<?php echo e($logo); ?>
</div>
<?php elseif(filled($logo)): ?>
<img
alt="<?php echo e(__('filament-panels::layout.logo.alt', ['name' => $brandName])); ?>"
src="<?php echo e($logo); ?>"
<?php echo e($attributes
->class([$getLogoClasses($isDarkMode)])
->style([$logoStyles])); ?>
/>
<?php else: ?>
<div
<?php echo e($attributes->class([
$getLogoClasses($isDarkMode),
])); ?>
>
<?php echo e($brandName); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php return new \Illuminate\Support\HtmlString(ob_get_clean()); };
})(get_defined_vars()); ?>
<?php echo e($content($brandLogo)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDarkModeBrandLogo): ?>
<?php echo e($content($darkModeBrandLogo, isDarkMode: true)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/logo.blade.php ENDPATH**/ ?>
@@ -0,0 +1,164 @@
<!-- Packing Action Form -->
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
<h2 class="text-2xl font-bold mb-4">📦 Confirm Packing</h2>
<form id="packingForm" action="<?php echo e(route('ops.order.pack', $order)); ?>" method="POST" class="space-y-4">
<?php echo csrf_field(); ?>
<div class="grid grid-cols-2 gap-4 md:grid-cols-4">
<!-- Width -->
<div>
<label for="width" class="block text-sm font-medium text-gray-700 mb-1">
Width (cm)
</label>
<input
type="number"
id="width"
name="width"
step="0.1"
min="1"
required
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="e.g., 30"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['width'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<!-- Length -->
<div>
<label for="length" class="block text-sm font-medium text-gray-700 mb-1">
Length (cm)
</label>
<input
type="number"
id="length"
name="length"
step="0.1"
min="1"
required
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="e.g., 40"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['length'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<!-- Height -->
<div>
<label for="height" class="block text-sm font-medium text-gray-700 mb-1">
Height (cm)
</label>
<input
type="number"
id="height"
name="height"
step="0.1"
min="1"
required
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="e.g., 10"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['height'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<!-- Weight -->
<div>
<label for="weight" class="block text-sm font-medium text-gray-700 mb-1">
Weight (kg)
</label>
<input
type="number"
id="weight"
name="weight"
step="0.1"
min="0.1"
required
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="e.g., 2.5"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['weight'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
<!-- Submit Button -->
<div class="flex gap-3 mt-6">
<button
type="submit"
class="bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-6 rounded-lg transition duration-200"
>
Confirm Packed
</button>
<button
type="reset"
class="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-6 rounded-lg transition duration-200"
>
Clear
</button>
</div>
</form>
<script>
document.getElementById('packingForm').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(this);
try {
const response = await fetch(this.action, {
method: 'POST',
headers: {
'Accept': 'application/json',
},
body: formData,
});
const data = await response.json();
if (response.ok) {
alert('✓ Order packed successfully!');
window.location.reload();
} else {
alert('Error: ' + (data.message || data.error || 'Unknown error'));
}
} catch (error) {
alert('Error submitting form: ' + error.message);
}
});
</script>
</div>
<?php /**PATH /var/www/additional_design/resources/views/ops/actions/packing.blade.php ENDPATH**/ ?>
@@ -0,0 +1,16 @@
<?php $layout->viewContext->mergeIntoNewEnvironment($__env); ?>
@component($layout->view, $layout->params)
@slot($layout->slotOrSection)
{!! $content !!}
@endslot
<?php
// Manually forward slots defined in the Livewire template into the layout component...
foreach ($layout->viewContext->slots[-1] ?? [] as $name => $slot) {
$__env->slot($name, attributes: $slot->attributes->getAttributes());
echo $slot->toHtml();
$__env->endSlot();
}
?>
@endcomponent
@@ -0,0 +1,286 @@
<?php
use Filament\Support\Enums\IconPosition;
use Filament\Support\Enums\IconSize;
use Filament\Support\Enums\Size;
use Filament\Support\View\Components\BadgeComponent;
use Filament\Support\View\Components\ButtonComponent;
use Illuminate\View\ComponentAttributeBag;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'badge' => null,
'badgeColor' => 'primary',
'badgeSize' => Size::ExtraSmall,
'color' => 'primary',
'disabled' => false,
'form' => null,
'formId' => null,
'href' => null,
'icon' => null,
'iconAlias' => null,
'iconPosition' => IconPosition::Before,
'iconSize' => null,
'keyBindings' => null,
'labeledFrom' => null,
'labelSrOnly' => false,
'loadingIndicator' => true,
'outlined' => false,
'size' => Size::Medium,
'spaMode' => null,
'tag' => 'button',
'target' => null,
'tooltip' => null,
'type' => 'button',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'badge' => null,
'badgeColor' => 'primary',
'badgeSize' => Size::ExtraSmall,
'color' => 'primary',
'disabled' => false,
'form' => null,
'formId' => null,
'href' => null,
'icon' => null,
'iconAlias' => null,
'iconPosition' => IconPosition::Before,
'iconSize' => null,
'keyBindings' => null,
'labeledFrom' => null,
'labelSrOnly' => false,
'loadingIndicator' => true,
'outlined' => false,
'size' => Size::Medium,
'spaMode' => null,
'tag' => 'button',
'target' => null,
'tooltip' => null,
'type' => 'button',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
if (! $iconPosition instanceof IconPosition) {
$iconPosition = filled($iconPosition) ? (IconPosition::tryFrom($iconPosition) ?? $iconPosition) : null;
}
if (! $size instanceof Size) {
$size = filled($size) ? (Size::tryFrom($size) ?? $size) : null;
}
if (! $badgeSize instanceof Size) {
$badgeSize = filled($badgeSize) ? (Size::tryFrom($badgeSize) ?? $badgeSize) : null;
}
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
}
$iconSize ??= match ($size) {
Size::ExtraSmall, Size::Small => IconSize::Small,
default => null,
};
$wireTarget = $loadingIndicator ? $attributes->whereStartsWith(['wire:target', 'wire:click'])->filter(fn ($value): bool => filled($value))->first() : null;
$hasFormProcessingLoadingIndicator = $type === 'submit' && filled($form);
$hasLoadingIndicator = filled($wireTarget) || $hasFormProcessingLoadingIndicator;
if ($hasLoadingIndicator) {
$loadingIndicatorTarget = html_entity_decode($wireTarget ?: $form, ENT_QUOTES);
}
$hasTooltip = filled($tooltip);
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($labeledFrom): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['badge' => $badge,'badgeColor' => $badgeColor,'badgeSize' => $badgeSize,'color' => $color,'disabled' => $disabled,'form' => $form,'formId' => $formId,'href' => $href,'icon' => $icon,'iconAlias' => $iconAlias,'iconSize' => $iconSize,'keyBindings' => $keyBindings,'label' => $slot,'loadingIndicator' => $loadingIndicator,'size' => $size,'spaMode' => $spaMode,'tag' => $tag,'target' => $target,'tooltip' => $tooltip,'type' => $type,'attributes' => \Filament\Support\prepare_inherited_attributes($attributes)]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeColor),'badge-size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeSize),'color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($color),'disabled' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($disabled),'form' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($form),'form-id' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($formId),'href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($href),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($icon),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconAlias),'icon-size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconSize),'key-bindings' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($keyBindings),'label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($slot),'loading-indicator' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loadingIndicator),'size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($size),'spa-mode' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($spaMode),'tag' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($tag),'target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($target),'tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($tooltip),'type' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($type),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\prepare_inherited_attributes($attributes))]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<<?php echo e($tag); ?>
<?php if(($tag === 'a') && (! ($disabled && $hasTooltip))): ?>
<?php echo e(\Filament\Support\generate_href_html($href, $target === '_blank', $spaMode)); ?>
<?php endif; ?>
<?php if($keyBindings): ?>
x-bind:id="$id('key-bindings')"
x-mousetrap.global.<?php echo e(collect($keyBindings)->map(fn (string $keyBinding): string => str_replace('+', '-', $keyBinding))->implode('.')); ?>="document.getElementById($el.id)?.click()"
<?php endif; ?>
<?php if($hasTooltip): ?>
x-tooltip="{
content: <?php echo \Illuminate\Support\Js::from($tooltip)->toHtml() ?>,
theme: $store.theme,
allowHTML: <?php echo \Illuminate\Support\Js::from($tooltip instanceof \Illuminate\Contracts\Support\Htmlable)->toHtml() ?>,
}"
<?php endif; ?>
<?php if($hasFormProcessingLoadingIndicator): ?>
x-data="filamentFormButton"
x-bind:class="{ 'fi-processing': isProcessing }"
<?php endif; ?>
<?php echo e($attributes
->merge([
'aria-disabled' => $disabled ? 'true' : null,
'aria-label' => $labelSrOnly ? trim(strip_tags($slot->toHtml())) : null,
'disabled' => $disabled && blank($tooltip),
'form' => $formId,
'type' => $tag === 'button' ? $type : null,
'wire:loading.attr' => $tag === 'button' ? 'disabled' : null,
'wire:target' => ($hasLoadingIndicator && $loadingIndicatorTarget) ? $loadingIndicatorTarget : null,
'x-bind:disabled' => $hasFormProcessingLoadingIndicator ? 'isProcessing' : null,
'x-bind:aria-label' => ($labelSrOnly && $hasFormProcessingLoadingIndicator) ? ('isProcessing ? processingMessage : ' . \Illuminate\Support\Js::from(trim(strip_tags($slot->toHtml())))) : null,
], escape: false)
->when(
$disabled && $hasTooltip,
fn (ComponentAttributeBag $attributes) => $attributes->filter(
fn (mixed $value, string $key): bool => ! str($key)->startsWith(['href', 'x-on:', 'wire:click']),
),
)
->class([
'fi-btn',
'fi-disabled' => $disabled,
'fi-outlined' => $outlined,
($size instanceof Size) ? "fi-size-{$size->value}" : (is_string($size) ? $size : ''),
is_string($labeledFrom) ? "fi-labeled-from-{$labeledFrom}" : null,
])
->color(app(ButtonComponent::class, ['isOutlined' => $outlined]), $color)); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::Before): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
'wire:target' => $loadingIndicatorTarget,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'x-cloak' => 'x-cloak',
'x-show' => 'isProcessing',
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $labelSrOnly): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator): ?>
<span x-show="! isProcessing">
<?php echo e($slot); ?>
</span>
<?php else: ?>
<?php echo e($slot); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator && (! $labelSrOnly)): ?>
<span
x-cloak
x-show="isProcessing"
x-text="processingMessage"
></span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::After): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
'wire:target' => $loadingIndicatorTarget,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'x-cloak' => 'x-cloak',
'x-show' => 'isProcessing',
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
<div class="fi-btn-badge-ctn">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($badge instanceof \Illuminate\View\ComponentSlot): ?>
<?php echo e($badge); ?>
<?php else: ?>
<span
<?php echo e((new ComponentAttributeBag)->color(BadgeComponent::class, $badgeColor)->class([
'fi-badge',
($badgeSize instanceof Size) ? "fi-size-{$badgeSize->value}" : (is_string($badgeSize) ? $badgeSize : ''),
])); ?>
>
<?php echo e($badge); ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</<?php echo e($tag); ?>>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/button/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,126 @@
<!-- Read-Only State -->
<div class="bg-blue-50 border-2 border-blue-200 rounded-lg p-6 mb-8">
<div class="flex items-start">
<div class="flex-1">
<h2 class="text-2xl font-bold text-blue-900 mb-2">📋 Order Status: Read-Only</h2>
<p class="text-blue-800 mb-4">
This order is in the <strong><?php echo e(str_replace('_', ' ', ucfirst($order->status))); ?></strong> phase.
No actions are available at this stage.
</p>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->status === 'ready_to_ship'): ?>
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
<p class="text-gray-700">
<strong>Next Step:</strong> Move Trello card to "Ready to Ship" to trigger automatic shipment creation.
</p>
</div>
<?php elseif($order->status === 'awaiting_collection'): ?>
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
<p class="text-gray-700">
<strong>Status:</strong> Parcel is awaiting collection from courier.
</p>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_waybill_id): ?>
<p class="text-gray-700 mt-2">
<strong>Waybill:</strong> <code class="bg-gray-100 px-2 py-1 rounded"><?php echo e($order->courier_waybill_id); ?></code>
</p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Re-download PDFs Button -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_shipment_id): ?>
<div class="mt-4">
<button
type="button"
onclick="redownloadPdfs('<?php echo e($order->uuid); ?>')"
class="bg-orange-500 hover:bg-orange-600 text-white font-bold py-2 px-4 rounded transition duration-200"
>
🔄 Re-download Shipment PDFs
</button>
<p class="text-gray-600 text-sm mt-2">If the shipment PDFs are corrupted, click this button to re-download them.</p>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php elseif($order->status === 'in_transit'): ?>
<div class="bg-white border-l-4 border-green-500 p-4 rounded">
<p class="text-gray-700">
<strong>Status:</strong> Parcel is in transit to the customer.
</p>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_tracking_number): ?>
<p class="text-gray-700 mt-2">
<strong>Tracking:</strong> <code class="bg-gray-100 px-2 py-1 rounded"><?php echo e($order->courier_tracking_number); ?></code>
</p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Re-download PDFs Button -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_shipment_id): ?>
<div class="mt-4">
<button
type="button"
onclick="redownloadPdfs('<?php echo e($order->uuid); ?>')"
class="bg-orange-500 hover:bg-orange-600 text-white font-bold py-2 px-4 rounded transition duration-200"
>
🔄 Re-download Shipment PDFs
</button>
<p class="text-gray-600 text-sm mt-2">If the shipment PDFs are corrupted, click this button to re-download them.</p>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php else: ?>
<div class="bg-white border-l-4 border-gray-500 p-4 rounded">
<p class="text-gray-700">
The order is progressing through the fulfillment pipeline.
</p>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
</div>
<script>
async function redownloadPdfs(orderUuid) {
if (!confirm('Re-download shipment PDFs from Shiplogic API?')) {
return;
}
const button = document.querySelector('[onclick*="redownloadPdfs"]');
button.disabled = true;
button.classList.add('opacity-50');
const originalText = button.innerText;
button.innerText = '⏳ Downloading...';
try {
// Get CSRF token from the page
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ||
document.querySelector('input[name="_token"]')?.value;
if (!csrfToken) {
throw new Error('CSRF token not found on page');
}
const response = await fetch(`/ops/orders/${orderUuid}/redownload-pdfs`, {
method: 'POST',
headers: {
'X-CSRF-Token': csrfToken,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const data = await response.json();
if (data.success) {
alert('✓ PDFs re-downloaded successfully!\n\nSticker: ' + data.sticker_path + '\nLabel: ' + data.waybill_path);
location.reload();
} else {
alert('✗ Failed to re-download PDFs:\n' + data.message);
}
} catch (error) {
alert('✗ Error: ' + error.message);
} finally {
button.disabled = false;
button.classList.remove('opacity-50');
button.innerText = originalText;
}
}
</script>
<?php /**PATH /var/www/additional_design/resources/views/ops/actions/read-only.blade.php ENDPATH**/ ?>
@@ -0,0 +1,23 @@
<?php if (isset($component)) { $__componentOriginal166a02a7c5ef5a9331faf66fa665c256 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal166a02a7c5ef5a9331faf66fa665c256 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::page'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo e($this->content); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal166a02a7c5ef5a9331faf66fa665c256)): ?>
<?php $attributes = $__attributesOriginal166a02a7c5ef5a9331faf66fa665c256; ?>
<?php unset($__attributesOriginal166a02a7c5ef5a9331faf66fa665c256); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal166a02a7c5ef5a9331faf66fa665c256)): ?>
<?php $component = $__componentOriginal166a02a7c5ef5a9331faf66fa665c256; ?>
<?php unset($__componentOriginal166a02a7c5ef5a9331faf66fa665c256); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/pages/page.blade.php ENDPATH**/ ?>
@@ -0,0 +1,59 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'icon',
'theme',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'icon',
'theme',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
$label = __("filament-panels::layout.actions.theme_switcher.{$theme}.label");
?>
<button
aria-label="<?php echo e($label); ?>"
type="button"
x-on:click="(theme = <?php echo \Illuminate\Support\Js::from($theme)->toHtml() ?>) && close()"
x-tooltip="{
content: <?php echo \Illuminate\Support\Js::from($label)->toHtml() ?>,
theme: $store.theme,
}"
x-bind:class="{ 'fi-active': theme === <?php echo \Illuminate\Support\Js::from($theme)->toHtml() ?> }"
class="fi-theme-switcher-btn"
>
<?php echo e(\Filament\Support\generate_icon_html($icon, alias: match ($theme) {
'light' => \Filament\View\PanelsIconAlias::THEME_SWITCHER_LIGHT_BUTTON,
'dark' => \Filament\View\PanelsIconAlias::THEME_SWITCHER_DARK_BUTTON,
'system' => \Filament\View\PanelsIconAlias::THEME_SWITCHER_SYSTEM_BUTTON,
})); ?>
</button>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/theme-switcher/button.blade.php ENDPATH**/ ?>
@@ -0,0 +1,70 @@
<?php
use Filament\Support\Enums\IconSize;
use Filament\Support\View\Components\DropdownComponent\HeaderComponent;
use Illuminate\View\ComponentAttributeBag;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'color' => 'gray',
'icon' => null,
'iconSize' => null,
'tag' => 'div',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'color' => 'gray',
'icon' => null,
'iconSize' => null,
'tag' => 'div',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
if (! ($iconSize instanceof IconSize)) {
$iconSize = filled($iconSize) ? (IconSize::tryFrom($iconSize) ?? $iconSize) : null;
}
?>
<<?php echo e($tag); ?>
<?php echo e($attributes
->class([
'fi-dropdown-header',
])
->color(HeaderComponent::class, $color)); ?>
>
<?php echo e(\Filament\Support\generate_icon_html($icon, size: $iconSize)); ?>
<span>
<?php echo e($slot); ?>
</span>
</<?php echo e($tag); ?>>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/dropdown/header.blade.php ENDPATH**/ ?>
@@ -0,0 +1,52 @@
<?php
use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\VerticalAlignment;
?>
<div>
<div
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-no',
'fi-align-' . static::$alignment->value,
'fi-vertical-align-' . static::$verticalAlignment->value,
]); ?>"
role="status"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $notifications; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $notification): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php echo e($notification); ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($broadcastChannel = $this->getBroadcastChannel()): ?>
<?php
$__scriptKey = '837482709-0';
ob_start();
?>
<script>
window.addEventListener('EchoLoaded', () => {
window.Echo.private(<?php echo \Illuminate\Support\Js::from($broadcastChannel)->toHtml() ?>).notification(
(notification) => {
setTimeout(
() =>
$wire.handleBroadcastNotification(
notification,
),
500,
)
},
)
})
if (window.Echo) {
window.dispatchEvent(new CustomEvent('EchoLoaded'))
}
</script>
<?php
$__output = ob_get_clean();
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/notifications/resources/views/notifications.blade.php ENDPATH**/ ?>
@@ -0,0 +1,342 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'active' => false,
'collapsible' => true,
'icon' => null,
'items' => [],
'label' => null,
'sidebarCollapsible' => true,
'subNavigation' => false,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'active' => false,
'collapsible' => true,
'icon' => null,
'items' => [],
'label' => null,
'sidebarCollapsible' => true,
'subNavigation' => false,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
$sidebarCollapsible = $sidebarCollapsible && filament()->isSidebarCollapsibleOnDesktop();
$hasDropdown = filled($label) && filled($icon) && $sidebarCollapsible;
?>
<li
x-data="{ label: <?php echo \Illuminate\Support\Js::from($subNavigation ? "sub_navigation_{$label}" : $label)->toHtml() ?> }"
data-group-label="<?php echo e($subNavigation ? "sub_navigation_{$label}" : $label); ?>"
x-bind:class="{ 'fi-collapsed': $store.sidebar.groupIsCollapsed(label) }"
<?php echo e($attributes->class([
'fi-sidebar-group',
'fi-active' => $active,
'fi-collapsible' => $collapsible,
])); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($label): ?>
<div
<?php if($collapsible): ?>
x-on:click="$store.sidebar.toggleCollapsedGroup(label)"
role="button"
<?php endif; ?>
<?php if($sidebarCollapsible): ?>
x-show="$store.sidebar.isOpen"
x-transition:enter="fi-transition-enter"
x-transition:enter-start="fi-transition-enter-start"
x-transition:enter-end="fi-transition-enter-end"
<?php endif; ?>
class="fi-sidebar-group-btn"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
<?php echo e(\Filament\Support\generate_icon_html($icon, size: \Filament\Support\Enums\IconSize::Large)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<span class="fi-sidebar-group-label">
<?php echo e($label); ?>
</span>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($collapsible): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::ChevronUp,'iconAlias' => \Filament\View\PanelsIconAlias::SIDEBAR_GROUP_COLLAPSE_BUTTON,'label' => $label,'xBind:ariaExpanded' => '! $store.sidebar.groupIsCollapsed(label)','xOn:click.stop' => '$store.sidebar.toggleCollapsedGroup(label)','class' => 'fi-sidebar-group-collapse-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ChevronUp),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::SIDEBAR_GROUP_COLLAPSE_BUTTON),'label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($label),'x-bind:aria-expanded' => '! $store.sidebar.groupIsCollapsed(label)','x-on:click.stop' => '$store.sidebar.toggleCollapsedGroup(label)','class' => 'fi-sidebar-group-collapse-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDropdown): ?>
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => (__('filament-panels::layout.direction') === 'rtl') ? 'left-start' : 'right-start','xShow' => '! $store.sidebar.isOpen']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['placement' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute((__('filament-panels::layout.direction') === 'rtl') ? 'left-start' : 'right-start'),'x-show' => '! $store.sidebar.isOpen']); ?>
<?php $__env->slot('trigger', null, []); ?>
<button
x-data="{ tooltip: false }"
x-effect="
tooltip = $store.sidebar.isOpen
? false
: {
content: <?php echo \Illuminate\Support\Js::from($label)->toHtml() ?>,
placement: document.dir === 'rtl' ? 'left' : 'right',
theme: $store.theme,
}
"
x-tooltip.html="tooltip"
class="fi-sidebar-group-dropdown-trigger-btn"
>
<?php echo e(\Filament\Support\generate_icon_html($icon, size: \Filament\Support\Enums\IconSize::Large)); ?>
</button>
<?php $__env->endSlot(); ?>
<?php
$lists = [];
foreach ($items as $item) {
if ($childItems = $item->getChildItems()) {
$lists[] = [
$item,
...$childItems,
];
$lists[] = [];
continue;
}
if (empty($lists)) {
$lists[] = [$item];
continue;
}
$lists[count($lists) - 1][] = $item;
}
if (empty($lists[count($lists) - 1])) {
array_pop($lists);
}
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($label)): ?>
<?php if (isset($component)) { $__componentOriginal7a83b62094aac4ed8d85f403cf23f250 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.header','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.header'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo e($label); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
<?php $attributes = $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
<?php unset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
<?php $component = $__componentOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
<?php unset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $lists; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $list): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $list; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$itemIsActive = $item->isActive();
$itemBadge = $item->getBadge();
$itemBadgeColor = $item->getBadgeColor();
$itemBadgeTooltip = $item->getBadgeTooltip();
$itemUrl = $item->getUrl();
$itemIcon = $itemIsActive ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon();
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
?>
<?php if (isset($component)) { $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.item','data' => ['badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'color' => $itemIsActive ? 'primary' : 'gray','href' => $itemUrl,'icon' => $itemIcon,'tag' => 'a','target' => $shouldItemOpenUrlInNewTab ? '_blank' : null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list.item'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIsActive ? 'primary' : 'gray'),'href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'tag' => 'a','target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab ? '_blank' : null)]); ?>
<?php echo e($item->getLabel()); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
<?php $attributes = $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
<?php unset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
<?php $component = $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
<?php unset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<ul
<?php if(filled($label)): ?>
<?php if($sidebarCollapsible): ?>
x-show="$store.sidebar.isOpen ? ! $store.sidebar.groupIsCollapsed(label) : ! <?php echo \Illuminate\Support\Js::from($hasDropdown)->toHtml() ?>"
<?php else: ?>
x-show="! $store.sidebar.groupIsCollapsed(label)"
<?php endif; ?>
x-collapse.duration.200ms
<?php endif; ?>
<?php if($sidebarCollapsible): ?>
x-transition:enter="fi-transition-enter"
x-transition:enter-start="fi-transition-enter-start"
x-transition:enter-end="fi-transition-enter-end"
<?php endif; ?>
class="fi-sidebar-group-items"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $items; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$isItemChildItemsActive = $item->isChildItemsActive();
$isItemActive = (! $isItemChildItemsActive) && $item->isActive();
$itemActiveIcon = $item->getActiveIcon();
$itemBadge = $item->getBadge();
$itemBadgeColor = $item->getBadgeColor();
$itemBadgeTooltip = $item->getBadgeTooltip();
$itemChildItems = $item->getChildItems();
$itemIcon = $item->getIcon();
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
$itemUrl = $item->getUrl();
if ($icon) {
if ($hasDropdown || (blank($itemIcon) && blank($itemActiveIcon))) {
$itemIcon = null;
$itemActiveIcon = null;
} else {
throw new \Exception('Navigation group [' . $label . '] has an icon but one or more of its items also have icons. Either the group or its items can have icons, but not both. This is to ensure a proper user experience.');
}
}
?>
<?php if (isset($component)) { $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.sidebar.item','data' => ['active' => $isItemActive,'activeChildItems' => $isItemChildItemsActive,'activeIcon' => $itemActiveIcon,'badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'childItems' => $itemChildItems,'first' => $loop->first,'grouped' => filled($label),'icon' => $itemIcon,'last' => $loop->last,'shouldOpenUrlInNewTab' => $shouldItemOpenUrlInNewTab,'sidebarCollapsible' => $sidebarCollapsible,'subNavigation' => $subNavigation,'url' => $itemUrl]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::sidebar.item'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemActive),'active-child-items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemChildItemsActive),'active-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemActiveIcon),'badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'child-items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemChildItems),'first' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->first),'grouped' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(filled($label)),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'last' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->last),'should-open-url-in-new-tab' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab),'sidebar-collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($sidebarCollapsible),'sub-navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation),'url' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl)]); ?>
<?php echo e($item->getLabel()); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemIcon instanceof \Illuminate\Contracts\Support\Htmlable): ?>
<?php $__env->slot('icon', null, []); ?>
<?php echo e($itemIcon); ?>
<?php $__env->endSlot(); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemActiveIcon instanceof \Illuminate\Contracts\Support\Htmlable): ?>
<?php $__env->slot('activeIcon', null, []); ?>
<?php echo e($itemActiveIcon); ?>
<?php $__env->endSlot(); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
<?php $attributes = $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
<?php unset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
<?php $component = $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
<?php unset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</ul>
</li>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/sidebar/group.blade.php ENDPATH**/ ?>
@@ -0,0 +1,67 @@
<?php
$extraAttributes = $getExtraAttributes();
$id = $getId();
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($id) || filled($extraAttributes)): ?>
<?php echo '<div'; ?>
<?php echo e($attributes
->merge([
'id' => $id,
], escape: false)
->merge($extraAttributes, escape: false)); ?>
>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($key = $getLivewireKey())): ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split($getComponent(), $getComponentProperties());
$key = $key;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-2569311901-0', $key);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php else: ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split($getComponent(), $getComponentProperties());
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-2569311901-1', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($id) || filled($extraAttributes)): ?>
<?php echo '</div>'; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/schemas/resources/views/components/livewire.blade.php ENDPATH**/ ?>
@@ -0,0 +1,12 @@
<div
<?php echo e($attributes
->merge([
'id' => $getId(),
], escape: false)
->merge($getExtraAttributes(), escape: false)); ?>
>
<?php echo e($getChildSchema()); ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/schemas/resources/views/components/grid.blade.php ENDPATH**/ ?>
@@ -0,0 +1,206 @@
<?php
use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\IconSize;
use Filament\Support\View\Components\SectionComponent\IconComponent;
use function Filament\Support\is_slot_empty;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'afterHeader' => null,
'aside' => false,
'collapsed' => false,
'collapseId' => null,
'collapsible' => false,
'compact' => false,
'contained' => true,
'contentBefore' => false,
'description' => null,
'divided' => false,
'footer' => null,
'hasContentEl' => true,
'heading' => null,
'headingTag' => 'h2',
'icon' => null,
'iconColor' => 'gray',
'iconSize' => null,
'persistCollapsed' => false,
'secondary' => false,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'afterHeader' => null,
'aside' => false,
'collapsed' => false,
'collapseId' => null,
'collapsible' => false,
'compact' => false,
'contained' => true,
'contentBefore' => false,
'description' => null,
'divided' => false,
'footer' => null,
'hasContentEl' => true,
'heading' => null,
'headingTag' => 'h2',
'icon' => null,
'iconColor' => 'gray',
'iconSize' => null,
'persistCollapsed' => false,
'secondary' => false,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
}
$hasDescription = filled((string) $description);
$hasHeading = filled($heading);
$hasIcon = filled($icon);
$hasHeader = $hasIcon || $hasHeading || $hasDescription || $collapsible || (! is_slot_empty($afterHeader));
?>
<section
x-data="{
isCollapsed: <?php if($persistCollapsed): ?> $persist(<?php echo \Illuminate\Support\Js::from($collapsed)->toHtml() ?>).as(`section-${<?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id}-isCollapsed`) <?php else: ?> <?php echo \Illuminate\Support\Js::from($collapsed)->toHtml() ?> <?php endif; ?>,
}"
<?php if($collapsible): ?>
x-on:collapse-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = true"
x-on:expand="isCollapsed = false"
x-on:expand-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = false"
x-on:open-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = false"
x-on:toggle-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = ! isCollapsed"
x-bind:class="isCollapsed && 'fi-collapsed'"
<?php endif; ?>
<?php echo e($attributes->class([
'fi-section',
'fi-section-not-contained' => ! $contained,
'fi-section-has-content-before' => $contentBefore,
'fi-section-has-header' => $hasHeader,
'fi-aside' => $aside,
'fi-compact' => $compact,
'fi-collapsible' => $collapsible,
'fi-divided' => $divided,
'fi-secondary' => $secondary,
])); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasHeader): ?>
<header
<?php if($collapsible): ?>
x-on:click="isCollapsed = ! isCollapsed"
<?php endif; ?>
class="fi-section-header"
>
<?php echo e(\Filament\Support\generate_icon_html($icon, attributes: (new \Illuminate\View\ComponentAttributeBag)
->color(IconComponent::class, $iconColor), size: $iconSize ?? IconSize::Large)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasHeading || $hasDescription): ?>
<div class="fi-section-header-text-ctn">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasHeading): ?>
<<?php echo e($headingTag); ?> class="fi-section-header-heading">
<?php echo e($heading); ?>
</<?php echo e($headingTag); ?>>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDescription): ?>
<p class="fi-section-header-description">
<?php echo e($description); ?>
</p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! is_slot_empty($afterHeader)): ?>
<div x-on:click.stop class="fi-section-header-after-ctn">
<?php echo e($afterHeader); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($collapsible): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::ChevronUp,'iconAlias' => \Filament\Support\View\SupportIconAlias::SECTION_COLLAPSE_BUTTON,'xOn:click.stop' => 'isCollapsed = ! isCollapsed','class' => 'fi-section-collapse-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ChevronUp),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\View\SupportIconAlias::SECTION_COLLAPSE_BUTTON),'x-on:click.stop' => 'isCollapsed = ! isCollapsed','class' => 'fi-section-collapse-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</header>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! is_slot_empty($slot)) || (! is_slot_empty($footer))): ?>
<div
<?php if($collapsible): ?>
x-bind:aria-expanded="(! isCollapsed).toString()"
<?php if($collapsed || $persistCollapsed): ?>
x-cloak
<?php endif; ?>
<?php endif; ?>
class="fi-section-content-ctn"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasContentEl): ?>
<div class="fi-section-content">
<?php echo e($slot); ?>
</div>
<?php else: ?>
<?php echo e($slot); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! is_slot_empty($footer)): ?>
<footer class="fi-section-footer">
<?php echo e($footer); ?>
</footer>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</section>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/section/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,18 @@
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasUnsavedChangesAlerts()): ?>
<?php
$__scriptKey = '2260693293-0';
ob_start();
?>
<script>
setUpUnsavedActionChangesAlert({
resolveLivewireComponentUsing: () => window.Livewire.find('<?php echo e($_instance->getId()); ?>'),
$wire,
})
</script>
<?php
$__output = ob_get_clean();
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/unsaved-action-changes-alert.blade.php ENDPATH**/ ?>
@@ -0,0 +1,378 @@
<div>
<?php
$navigation = filament()->getNavigation();
$isRtl = __('filament-panels::layout.direction') === 'rtl';
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
$hasNavigation = filament()->hasNavigation();
$hasTopbar = filament()->hasTopbar();
?>
<aside
x-data="{}"
<?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
x-cloak
<?php else: ?>
x-cloak="-lg"
<?php endif; ?>
x-bind:class="{ 'fi-sidebar-open': $store.sidebar.isOpen }"
class="fi-sidebar fi-main-sidebar"
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_START)); ?>
<div class="fi-sidebar-header-ctn">
<header
class="fi-sidebar-header"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! $hasTopbar) && $isSidebarCollapsibleOnDesktop): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight,'iconAlias' =>
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','xShow' => '! $store.sidebar.isOpen','class' => 'fi-sidebar-open-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','x-show' => '! $store.sidebar.isOpen','class' => 'fi-sidebar-open-collapse-sidebar-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if((! $hasTopbar) && ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop)): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft,'iconAlias' =>
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.collapse.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.close()','xShow' => '$store.sidebar.isOpen','class' => 'fi-sidebar-close-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.collapse.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.close()','x-show' => '$store.sidebar.isOpen','class' => 'fi-sidebar-close-collapse-sidebar-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_LOGO_BEFORE)); ?>
<div x-show="$store.sidebar.isOpen" class="fi-sidebar-header-logo-ctn">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($homeUrl = filament()->getHomeUrl()): ?>
<a <?php echo e(\Filament\Support\generate_href_html($homeUrl)); ?>>
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::logo'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
</a>
<?php else: ?>
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::logo'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_LOGO_AFTER)); ?>
</header>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasTenancy() && filament()->hasTenantMenu()): ?>
<?php if (isset($component)) { $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.tenant-menu','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::tenant-menu'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
<?php $attributes = $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
<?php unset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
<?php $component = $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
<?php unset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(filament()->isGlobalSearchEnabled() && filament()->getGlobalSearchPosition() === \Filament\Enums\GlobalSearchPosition::Sidebar): ?>
<div
<?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
x-show="$store.sidebar.isOpen"
<?php endif; ?>
>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(Filament\Livewire\GlobalSearch::class);
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-3561320262-0', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<nav class="fi-sidebar-nav">
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_NAV_START)); ?>
<ul class="fi-sidebar-nav-groups">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $navigation; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $group): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$isGroupActive = $group->isActive();
$isGroupCollapsible = $group->isCollapsible();
$groupIcon = $group->getIcon();
$groupItems = $group->getItems();
$groupLabel = $group->getLabel();
$groupExtraSidebarAttributeBag = $group->getExtraSidebarAttributeBag();
?>
<?php if (isset($component)) { $__componentOriginal59b772cc9788bdb14bf9872624b4f33a = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal59b772cc9788bdb14bf9872624b4f33a = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.sidebar.group','data' => ['active' => $isGroupActive,'collapsible' => $isGroupCollapsible,'icon' => $groupIcon,'items' => $groupItems,'label' => $groupLabel,'attributes' => \Filament\Support\prepare_inherited_attributes($groupExtraSidebarAttributeBag)]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::sidebar.group'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isGroupActive),'collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isGroupCollapsible),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupIcon),'items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupItems),'label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupLabel),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\prepare_inherited_attributes($groupExtraSidebarAttributeBag))]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal59b772cc9788bdb14bf9872624b4f33a)): ?>
<?php $attributes = $__attributesOriginal59b772cc9788bdb14bf9872624b4f33a; ?>
<?php unset($__attributesOriginal59b772cc9788bdb14bf9872624b4f33a); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal59b772cc9788bdb14bf9872624b4f33a)): ?>
<?php $component = $__componentOriginal59b772cc9788bdb14bf9872624b4f33a; ?>
<?php unset($__componentOriginal59b772cc9788bdb14bf9872624b4f33a); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</ul>
<script>
var collapsedGroups = JSON.parse(
localStorage.getItem('collapsedGroups'),
)
if (collapsedGroups === null || collapsedGroups === 'null') {
localStorage.setItem(
'collapsedGroups',
JSON.stringify(<?php echo \Illuminate\Support\Js::from(
collect($navigation)
->filter(fn (\Filament\Navigation\NavigationGroup $group): bool => $group->isCollapsed())
->map(fn (\Filament\Navigation\NavigationGroup $group): string => $group->getLabel())
->values()
->all()
)->toHtml() ?>),
)
}
collapsedGroups = JSON.parse(
localStorage.getItem('collapsedGroups'),
)
document
.querySelectorAll('.fi-sidebar-group')
.forEach((group) => {
if (
!collapsedGroups.includes(group.dataset.groupLabel)
) {
return
}
// Alpine.js loads too slow, so attempt to hide a
// collapsed sidebar group earlier.
group.querySelector(
'.fi-sidebar-group-items',
).style.display = 'none'
group.classList.add('fi-collapsed')
})
</script>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_NAV_END)); ?>
</nav>
<?php
$isAuthenticated = filament()->auth()->check();
$hasDatabaseNotificationsInSidebar = filament()->hasDatabaseNotifications() && filament()->getDatabaseNotificationsPosition() === \Filament\Enums\DatabaseNotificationsPosition::Sidebar;
$hasUserMenuInSidebar = filament()->hasUserMenu() && filament()->getUserMenuPosition() === \Filament\Enums\UserMenuPosition::Sidebar;
$shouldRenderFooter = $isAuthenticated && ($hasDatabaseNotificationsInSidebar || $hasUserMenuInSidebar);
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($shouldRenderFooter): ?>
<div class="fi-sidebar-footer">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDatabaseNotificationsInSidebar): ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(Filament\Livewire\DatabaseNotifications::class, [
'lazy' => filament()->hasLazyLoadedDatabaseNotifications(),
]);
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-3561320262-1', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasUserMenuInSidebar): ?>
<?php if (isset($component)) { $__componentOriginalf72c4437b846e6919081d8fc29939c50 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf72c4437b846e6919081d8fc29939c50 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.user-menu','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::user-menu'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf72c4437b846e6919081d8fc29939c50)): ?>
<?php $attributes = $__attributesOriginalf72c4437b846e6919081d8fc29939c50; ?>
<?php unset($__attributesOriginalf72c4437b846e6919081d8fc29939c50); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf72c4437b846e6919081d8fc29939c50)): ?>
<?php $component = $__componentOriginalf72c4437b846e6919081d8fc29939c50; ?>
<?php unset($__componentOriginalf72c4437b846e6919081d8fc29939c50); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_FOOTER)); ?>
</aside>
<?php if (isset($component)) { $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-actions::components.modals','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-actions::modals'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
<?php $attributes = $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
<?php unset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
<?php $component = $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
<?php unset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
<?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/livewire/sidebar.blade.php ENDPATH**/ ?>
@@ -0,0 +1,45 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'inlinePrefix' => false,
'inlineSuffix' => false,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'inlinePrefix' => false,
'inlineSuffix' => false,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<input
<?php echo e($attributes->class([
'fi-input',
'fi-input-has-inline-prefix' => $inlinePrefix,
'fi-input-has-inline-suffix' => $inlineSuffix,
])); ?>
/>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/input/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,21 @@
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($this instanceof \Filament\Actions\Contracts\HasActions && (! $this->hasActionsModalRendered)): ?>
<div
wire:partial="action-modals"
x-data="filamentActionModals({
livewireId: <?php echo \Illuminate\Support\Js::from($this->getId())->toHtml() ?>,
})"
style="height: 0"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $this->getMountedActions(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $action): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! $loop->last) || $this->mountedActionShouldOpenModal()): ?>
<?php echo e($action->toModalHtmlable()); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php
$this->hasActionsModalRendered = true;
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/actions/resources/views/components/modals.blade.php ENDPATH**/ ?>
@@ -0,0 +1,189 @@
<?php
use Filament\Support\Enums\IconSize;
use Filament\Support\Enums\Size;
use Filament\Support\View\Components\BadgeComponent;
use Filament\Support\View\Components\IconButtonComponent;
use Illuminate\View\ComponentAttributeBag;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'badge' => null,
'badgeColor' => 'primary',
'badgeSize' => Size::ExtraSmall,
'color' => 'primary',
'disabled' => false,
'form' => null,
'formId' => null,
'href' => null,
'icon' => null,
'iconAlias' => null,
'iconSize' => null,
'keyBindings' => null,
'label' => null,
'loadingIndicator' => true,
'size' => Size::Medium,
'spaMode' => null,
'tag' => 'button',
'target' => null,
'tooltip' => null,
'type' => 'button',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'badge' => null,
'badgeColor' => 'primary',
'badgeSize' => Size::ExtraSmall,
'color' => 'primary',
'disabled' => false,
'form' => null,
'formId' => null,
'href' => null,
'icon' => null,
'iconAlias' => null,
'iconSize' => null,
'keyBindings' => null,
'label' => null,
'loadingIndicator' => true,
'size' => Size::Medium,
'spaMode' => null,
'tag' => 'button',
'target' => null,
'tooltip' => null,
'type' => 'button',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
if (! $size instanceof Size) {
$size = filled($size) ? (Size::tryFrom($size) ?? $size) : null;
}
if (! $badgeSize instanceof Size) {
$badgeSize = filled($badgeSize) ? (Size::tryFrom($badgeSize) ?? $badgeSize) : null;
}
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
}
$iconSize ??= match ($size) {
Size::ExtraSmall => IconSize::Small,
Size::Large, Size::ExtraLarge => IconSize::Large,
default => null,
};
$wireTarget = $loadingIndicator ? $attributes->whereStartsWith(['wire:target', 'wire:click'])->filter(fn ($value): bool => filled($value))->first() : null;
$hasLoadingIndicator = filled($wireTarget) || ($type === 'submit' && filled($form));
if ($hasLoadingIndicator) {
$loadingIndicatorTarget = html_entity_decode($wireTarget ?: $form, ENT_QUOTES);
}
$hasTooltip = $hasTooltip = filled($tooltip);
?>
<<?php echo e($tag); ?>
<?php if(($tag === 'a') && (! ($disabled && $hasTooltip))): ?>
<?php echo e(\Filament\Support\generate_href_html($href, $target === '_blank', $spaMode)); ?>
<?php endif; ?>
<?php if($keyBindings): ?>
x-bind:id="$id('key-bindings')"
x-mousetrap.global.<?php echo e(collect($keyBindings)->map(fn (string $keyBinding): string => str_replace('+', '-', $keyBinding))->implode('.')); ?>="document.getElementById($el.id)?.click()"
<?php endif; ?>
<?php if($hasTooltip): ?>
x-tooltip="{
content: <?php echo \Illuminate\Support\Js::from($tooltip)->toHtml() ?>,
theme: $store.theme,
allowHTML: <?php echo \Illuminate\Support\Js::from($tooltip instanceof \Illuminate\Contracts\Support\Htmlable)->toHtml() ?>,
}"
<?php endif; ?>
<?php echo e($attributes
->merge([
'aria-disabled' => $disabled ? 'true' : null,
'aria-label' => $label,
'disabled' => $disabled && blank($tooltip),
'form' => $formId,
'type' => $tag === 'button' ? $type : null,
'wire:loading.attr' => $tag === 'button' ? 'disabled' : null,
'wire:target' => ($hasLoadingIndicator && $loadingIndicatorTarget) ? $loadingIndicatorTarget : null,
], escape: false)
->merge([
'title' => $hasTooltip ? null : $label,
], escape: true)
->when(
$disabled && $hasTooltip,
fn (ComponentAttributeBag $attributes) => $attributes->filter(
fn (mixed $value, string $key): bool => ! str($key)->startsWith(['href', 'x-on:', 'wire:click']),
),
)
->class([
'fi-icon-btn',
'fi-disabled' => $disabled,
($size instanceof Size) ? "fi-size-{$size->value}" : (is_string($size) ? $size : ''),
])
->color(IconButtonComponent::class, $color)); ?>
>
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
])), size: $iconSize)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
'wire:target' => $loadingIndicatorTarget,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
<div class="fi-icon-btn-badge-ctn">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($badge instanceof \Illuminate\View\ComponentSlot): ?>
<?php echo e($badge); ?>
<?php else: ?>
<span
<?php echo e((new ComponentAttributeBag)->color(BadgeComponent::class, $badgeColor)->class([
'fi-badge',
($badgeSize instanceof Size) ? "fi-size-{$badgeSize->value}" : (is_string($badgeSize) ? $badgeSize : ''),
])); ?>
>
<?php echo e($badge); ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</<?php echo e($tag); ?>>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/icon-button.blade.php ENDPATH**/ ?>
@@ -0,0 +1,112 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'availableHeight' => null,
'availableWidth' => null,
'flip' => true,
'maxHeight' => null,
'offset' => 8,
'placement' => null,
'shift' => false,
'size' => false,
'sizePadding' => 16,
'teleport' => false,
'trigger' => null,
'width' => null,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'availableHeight' => null,
'availableWidth' => null,
'flip' => true,
'maxHeight' => null,
'offset' => 8,
'placement' => null,
'shift' => false,
'size' => false,
'sizePadding' => 16,
'teleport' => false,
'trigger' => null,
'width' => null,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
use Filament\Support\Enums\Width;
$sizeConfig = collect([
'availableHeight' => $availableHeight,
'availableWidth' => $availableWidth,
'padding' => $sizePadding,
])->filter()->toJson();
if (is_string($width)) {
$width = Width::tryFrom($width) ?? $width;
}
?>
<div
x-data="filamentDropdown"
<?php echo e($attributes->class(['fi-dropdown'])); ?>
>
<div
x-on:keyup.enter="toggle($event)"
x-on:keyup.space="toggle($event)"
x-on:mousedown="if ($event.button === 0) toggle($event)"
<?php echo e($trigger->attributes->class(['fi-dropdown-trigger'])); ?>
>
<?php echo e($trigger); ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! \Filament\Support\is_slot_empty($slot)): ?>
<div
x-cloak
x-float<?php echo e($placement ? ".placement.{$placement}" : ''); ?><?php echo e($size ? '.size' : ''); ?><?php echo e($flip ? '.flip' : ''); ?><?php echo e($shift ? '.shift' : ''); ?><?php echo e($teleport ? '.teleport' : ''); ?><?php echo e($offset ? '.offset' : ''); ?>="{ offset: <?php echo e($offset); ?>, <?php echo e($size ? ('size: ' . $sizeConfig) : ''); ?> }"
x-ref="panel"
x-transition:enter-start="fi-opacity-0"
x-transition:leave-end="fi-opacity-0"
<?php if($attributes->has('wire:key')): ?>
wire:ignore.self
wire:key="<?php echo e($attributes->get('wire:key')); ?>.panel"
<?php endif; ?>
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-dropdown-panel',
($width instanceof Width) ? "fi-width-{$width->value}" : (is_string($width) ? $width : ''),
'fi-scrollable' => $maxHeight || $size,
]); ?>"
style="<?php echo \Illuminate\Support\Arr::toCssStyles([
"max-height: {$maxHeight}" => $maxHeight,
]) ?>"
>
<?php echo e($slot); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/dropdown/index.blade.php ENDPATH**/ ?>
@@ -41,7 +41,9 @@
}
.form-group input,
.form-group textarea {
.form-group textarea,
.form-group select,
.address-search-group input {
width: 100%;
padding: 0.75rem;
border: 1px solid #ddd;
@@ -56,12 +58,52 @@
}
.form-group input:focus,
.form-group textarea:focus {
.form-group textarea:focus,
.form-group select:focus,
.address-search-group input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(45, 80, 71, 0.1);
}
/* Google Places Autocomplete styling */
.pac-container {
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
margin-top: 4px;
}
.pac-item {
padding: 0.75rem;
cursor: pointer;
}
.pac-item:hover {
background-color: #f0f0f0;
}
.address-search-group {
margin-bottom: 1.5rem;
position: relative;
}
.address-clear-btn {
position: absolute;
right: 12px;
top: 32px;
background: none;
border: none;
color: #999;
cursor: pointer;
font-size: 1.2rem;
padding: 0;
display: none;
}
.address-clear-btn.show {
display: block;
}
.order-summary {
height: fit-content;
}
@@ -195,23 +237,74 @@
<h2>Delivery Information</h2>
<div class="form-group">
<label for="customer_name">Full Name</label>
<input type="text" id="customer_name" name="customer_name" value="<?php echo e(old('customer_name')); ?>" required>
<label for="customer_name">Full Name<span style="color: red;">*</span></label>
<input type="text" id="customer_name" name="customer_name" value="<?php echo e(old('customer_name', Auth::check() ? Auth::user()->name : '')); ?>" required>
</div>
<div class="form-group">
<label for="customer_email">Email Address</label>
<input type="email" id="customer_email" name="customer_email" value="<?php echo e(old('customer_email')); ?>" required>
<label for="customer_email">Email Address<span style="color: red;">*</span></label>
<input type="email" id="customer_email" name="customer_email" value="<?php echo e(old('customer_email', Auth::check() ? Auth::user()->email : '')); ?>" required>
</div>
<div class="form-group">
<label for="customer_phone">Phone Number</label>
<label for="customer_phone">Phone Number<span style="color: red;">*</span></label>
<input type="tel" id="customer_phone" name="customer_phone" value="<?php echo e(old('customer_phone')); ?>" required>
</div>
<div class="form-group">
<label for="shipping_address">Delivery Address</label>
<textarea id="shipping_address" name="shipping_address" required><?php echo e(old('shipping_address')); ?></textarea>
<label for="shipping_type">Address Type <span style="color: red;">*</span></label>
<select id="shipping_type" name="shipping_type" required>
<option value="residential" <?php echo e(old('shipping_type') === 'residential' ? 'selected' : ''); ?>>Residential</option>
<option value="business" <?php echo e(old('shipping_type') === 'business' ? 'selected' : ''); ?>>Business</option>
</select>
</div>
<div class="form-group" id="business_name_group" style="display: none;">
<label for="business_name">Business Name <span style="color: red;">*</span></label>
<input type="text" id="business_name" name="business_name" value="<?php echo e(old('business_name')); ?>" placeholder="Enter your business name">
</div>
<div class="address-search-group">
<label for="address_search">Delivery Address (Type to search)</label>
<input type="text" id="address_search" placeholder="Start typing your address..." autocomplete="off">
<button type="button" class="address-clear-btn" id="address_clear_btn"></button>
</div>
<div id="address_fields_group">
<div class="form-group">
<label for="shipping_unit_number">Apartment / Unit / Building Number (Optional)</label>
<input type="text" id="shipping_unit_number" name="shipping_unit_number" placeholder="e.g. Apt 101, Unit B, Building 3" value="<?php echo e(old('shipping_unit_number')); ?>">
</div>
<div class="form-group">
<label for="shipping_street_address">Street Address <span style="color: red;">*</span></label>
<input type="text" id="shipping_street_address" name="shipping_street_address" value="<?php echo e(old('shipping_street_address')); ?>" required>
</div>
<div class="form-group">
<label for="shipping_local_area">Suburb<span style="color: red;">*</span></label>
<input type="text" id="shipping_local_area" name="shipping_local_area" value="<?php echo e(old('shipping_local_area')); ?>" required>
</div>
<div class="form-group">
<label for="shipping_city">City <span style="color: red;">*</span></label>
<input type="text" id="shipping_city" name="shipping_city" value="<?php echo e(old('shipping_city')); ?>" required>
</div>
<div class="form-group">
<label for="shipping_zone">Province<span style="color: red;">*</span></label>
<input type="text" id="shipping_zone" name="shipping_zone" value="<?php echo e(old('shipping_zone')); ?>" required>
</div>
<div class="form-group">
<label for="shipping_postcode">Postal Code <span style="color: red;">*</span></label>
<input type="text" id="shipping_postcode" name="shipping_postcode" value="<?php echo e(old('shipping_postcode')); ?>" required>
</div>
<div class="form-group">
<label for="shipping_country">Country</label>
<input type="text" id="shipping_country" name="shipping_country" value="ZA" readonly>
</div>
</div>
<div class="form-group">
@@ -286,6 +379,184 @@
</div>
</div>
</div>
<?php
$apiKey = config('services.google_places.api_key');
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(!$apiKey): ?>
<div style="background: #fff3cd; padding: 1rem; margin-bottom: 1rem; border-radius: 4px; color: #856404;">
<strong>⚠️ Configuration Issue:</strong> Google Places API key is not configured. Please add <code>GOOGLE_PLACES_API_KEY</code> to your .env file.
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<script>
// console.log('Checkout page loaded');
// console.log('API Key configured:', <?php echo e($apiKey ? 'true' : 'false'); ?>);
// <?php if($apiKey): ?>
// console.log('API Key length:', <?php echo e(strlen($apiKey)); ?>);
// <?php endif; ?>
</script>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($apiKey): ?>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=<?php echo e($apiKey); ?>&loading=async&libraries=places&callback=initializeAddressAutocomplete"></script>
<!-- <script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "<?php echo e($apiKey); ?>",
v: "weekly",
}); -->
</script>
<script>
// Handle shipping type change
document.getElementById('shipping_type').addEventListener('change', function() {
const businessNameGroup = document.getElementById('business_name_group');
const businessNameInput = document.getElementById('business_name');
if (this.value === 'business') {
businessNameGroup.style.display = 'block';
businessNameInput.setAttribute('required', 'required');
} else {
businessNameGroup.style.display = 'none';
businessNameInput.removeAttribute('required');
businessNameInput.value = '';
}
});
// Check initial state on page load
document.addEventListener('DOMContentLoaded', function() {
const shippingType = document.getElementById('shipping_type');
if (shippingType && shippingType.value === 'business') {
document.getElementById('business_name_group').style.display = 'block';
}
});
function initializeAddressAutocomplete() {
console.log('✓ Google Maps API loaded');
const addressSearchInput = document.getElementById('address_search');
const clearBtn = document.getElementById('address_clear_btn');
if (!addressSearchInput) {
console.error('Address search input not found');
return;
}
try {
console.log('Initializing Google Places Autocomplete...');
// Using modern Autocomplete with new API
const autocomplete = new google.maps.places.Autocomplete(addressSearchInput, {
componentRestrictions: { country: 'za' },
types: ['geocode']
});
console.log('✓ Google Places Autocomplete initialized');
// Prevent form submission on Enter when autocomplete dropdown is open
addressSearchInput.addEventListener('keydown', function(e) {
const pacContainer = document.querySelector('.pac-container:not([style*="display: none"])');
if (e.key === 'Enter' && pacContainer) {
e.preventDefault();
}
});
// When place is selected
autocomplete.addListener('place_changed', function() {
const place = autocomplete.getPlace();
if (!place.geometry) {
console.warn('Selected place has no geometry');
return;
}
console.log('✓ Address selected:', place.formatted_address);
// Parse address components
const addressComponents = {};
place.address_components.forEach(component => {
addressComponents[component.types[0]] = component.long_name;
});
// Debug: log all available components
console.log('Address components available:', Object.keys(addressComponents));
// Populate form fields
document.getElementById('shipping_street_address').value =
(addressComponents['street_number'] ? addressComponents['street_number'] + ' ' : '') +
(addressComponents['route'] || '');
document.getElementById('shipping_local_area').value =
addressComponents['political'] ||
addressComponents['sublocality'] ||
addressComponents['sublocality_level_1'] ||
addressComponents['sublocality_level_2'] || '';
document.getElementById('shipping_city').value =
addressComponents['locality'] || addressComponents['administrative_area_level_2'] || '';
document.getElementById('shipping_zone').value =
addressComponents['administrative_area_level_1'] || '';
document.getElementById('shipping_postcode').value =
addressComponents['postal_code'] || '';
document.getElementById('shipping_country').value =
addressComponents['country'] || 'ZA';
// Show clear button
clearBtn.classList.add('show');
});
// Clear button functionality
clearBtn.addEventListener('click', function(e) {
e.preventDefault();
addressSearchInput.value = '';
addressSearchInput.focus();
clearBtn.classList.remove('show');
// Clear form fields
document.getElementById('shipping_street_address').value = '';
document.getElementById('shipping_unit_number').value = '';
document.getElementById('shipping_local_area').value = '';
document.getElementById('shipping_city').value = '';
document.getElementById('shipping_zone').value = '';
document.getElementById('shipping_postcode').value = '';
});
} catch (error) {
console.error('✗ Error initializing autocomplete:', error);
showAddressFieldsManually();
}
}
function showAddressFieldsManually() {
const addressSearchInput = document.getElementById('address_search');
if (addressSearchInput) {
addressSearchInput.style.display = 'none';
document.querySelector('label[for="address_search"]').style.display = 'none';
document.getElementById('address_clear_btn').style.display = 'none';
const fieldsGroup = document.getElementById('address_fields_group');
if (fieldsGroup) {
const notice = document.createElement('div');
notice.style.cssText = 'background: #f0f0f0; padding: 1rem; border-radius: 4px; margin-bottom: 1.5rem; color: #666;';
notice.innerHTML = '<strong>Note:</strong> Address search is not available. Please fill in your address details manually below.';
fieldsGroup.parentNode.insertBefore(notice, fieldsGroup);
}
}
}
// If Google API doesn't load after 5 seconds, show fallback
setTimeout(() => {
if (typeof google === 'undefined') {
console.warn('Google Maps API failed to load');
showAddressFieldsManually();
}
}, 5000);
</script>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/checkout.blade.php ENDPATH**/ ?>
@@ -0,0 +1,21 @@
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(isset($data)): ?>
<script>
window.filamentData = <?php echo \Illuminate\Support\Js::from($data)->toHtml() ?>
</script>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $assets; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $asset): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $asset->isLoadedOnRequest()): ?>
<?php echo e($asset->getHtml()); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<style>
:root {
<?php $__currentLoopData = $cssVariables ?? []; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $cssVariableName => $cssVariableValue): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> --<?php echo e($cssVariableName); ?>:<?php echo e($cssVariableValue); ?>; <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
}
<?php $__currentLoopData = $customColors ?? []; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $customColorName => $customColorShades): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> .fi-color-<?php echo e($customColorName); ?> { <?php $__currentLoopData = $customColorShades; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $customColorShade): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> --color-<?php echo e($customColorShade); ?>:var(--<?php echo e($customColorName); ?>-<?php echo e($customColorShade); ?>); <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?> } <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</style>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/assets.blade.php ENDPATH**/ ?>
@@ -0,0 +1,127 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'actions' => [],
'actionsAlignment' => null,
'breadcrumbs' => [],
'heading' => null,
'subheading' => null,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'actions' => [],
'actionsAlignment' => null,
'breadcrumbs' => [],
'heading' => null,
'subheading' => null,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<header
<?php echo e($attributes->class([
'fi-header',
'fi-header-has-breadcrumbs' => $breadcrumbs,
])); ?>
>
<div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($breadcrumbs): ?>
<?php if (isset($component)) { $__componentOriginale1cebc129855f156aa8f78d22103aca1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginale1cebc129855f156aa8f78d22103aca1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.breadcrumbs','data' => ['breadcrumbs' => $breadcrumbs]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::breadcrumbs'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['breadcrumbs' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($breadcrumbs)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginale1cebc129855f156aa8f78d22103aca1)): ?>
<?php $attributes = $__attributesOriginale1cebc129855f156aa8f78d22103aca1; ?>
<?php unset($__attributesOriginale1cebc129855f156aa8f78d22103aca1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginale1cebc129855f156aa8f78d22103aca1)): ?>
<?php $component = $__componentOriginale1cebc129855f156aa8f78d22103aca1; ?>
<?php unset($__componentOriginale1cebc129855f156aa8f78d22103aca1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($heading)): ?>
<h1 class="fi-header-heading">
<?php echo e($heading); ?>
</h1>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($subheading)): ?>
<p class="fi-header-subheading">
<?php echo e($subheading); ?>
</p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php
$beforeActions = \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_ACTIONS_BEFORE, scopes: $this->getRenderHookScopes());
$afterActions = \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_ACTIONS_AFTER, scopes: $this->getRenderHookScopes());
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($beforeActions) || $actions || filled($afterActions)): ?>
<div class="fi-header-actions-ctn">
<?php echo e($beforeActions); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($actions): ?>
<?php if (isset($component)) { $__componentOriginal59d80b1aec4ae4c914a3e52dede19504 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal59d80b1aec4ae4c914a3e52dede19504 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.actions','data' => ['actions' => $actions,'alignment' => $actionsAlignment]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::actions'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['actions' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($actions),'alignment' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($actionsAlignment)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal59d80b1aec4ae4c914a3e52dede19504)): ?>
<?php $attributes = $__attributesOriginal59d80b1aec4ae4c914a3e52dede19504; ?>
<?php unset($__attributesOriginal59d80b1aec4ae4c914a3e52dede19504); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal59d80b1aec4ae4c914a3e52dede19504)): ?>
<?php $component = $__componentOriginal59d80b1aec4ae4c914a3e52dede19504; ?>
<?php unset($__componentOriginal59d80b1aec4ae4c914a3e52dede19504); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e($afterActions); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</header>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/header/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,75 @@
<div
x-data="{ theme: null }"
x-init="
$watch('theme', () => {
$dispatch('theme-changed', theme)
})
theme = localStorage.getItem('theme') || <?php echo \Illuminate\Support\Js::from(filament()->getDefaultThemeMode()->value)->toHtml() ?>
"
class="fi-theme-switcher"
>
<?php if (isset($component)) { $__componentOriginalad1f400c934be44fb66b397d4f7989b8 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalad1f400c934be44fb66b397d4f7989b8 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.button','data' => ['icon' => \Filament\Support\Icons\Heroicon::Sun,'theme' => 'light']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::theme-switcher.button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::Sun),'theme' => 'light']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
<?php $attributes = $__attributesOriginalad1f400c934be44fb66b397d4f7989b8; ?>
<?php unset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
<?php $component = $__componentOriginalad1f400c934be44fb66b397d4f7989b8; ?>
<?php unset($__componentOriginalad1f400c934be44fb66b397d4f7989b8); ?>
<?php endif; ?>
<?php if (isset($component)) { $__componentOriginalad1f400c934be44fb66b397d4f7989b8 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalad1f400c934be44fb66b397d4f7989b8 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.button','data' => ['icon' => \Filament\Support\Icons\Heroicon::Moon,'theme' => 'dark']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::theme-switcher.button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::Moon),'theme' => 'dark']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
<?php $attributes = $__attributesOriginalad1f400c934be44fb66b397d4f7989b8; ?>
<?php unset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
<?php $component = $__componentOriginalad1f400c934be44fb66b397d4f7989b8; ?>
<?php unset($__componentOriginalad1f400c934be44fb66b397d4f7989b8); ?>
<?php endif; ?>
<?php if (isset($component)) { $__componentOriginalad1f400c934be44fb66b397d4f7989b8 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalad1f400c934be44fb66b397d4f7989b8 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.button','data' => ['icon' => \Filament\Support\Icons\Heroicon::ComputerDesktop,'theme' => 'system']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::theme-switcher.button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ComputerDesktop),'theme' => 'system']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
<?php $attributes = $__attributesOriginalad1f400c934be44fb66b397d4f7989b8; ?>
<?php unset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
<?php $component = $__componentOriginalad1f400c934be44fb66b397d4f7989b8; ?>
<?php unset($__componentOriginalad1f400c934be44fb66b397d4f7989b8); ?>
<?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/theme-switcher/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,325 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'position' => null,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'position' => null,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
use Filament\Actions\Action;
use Filament\Enums\UserMenuPosition;
use Illuminate\Support\Arr;
$user = filament()->auth()->user();
$items = $this->getUserMenuItems();
$itemsBeforeAndAfterThemeSwitcher = collect($items)
->groupBy(fn (Action $item): bool => $item->getSort() < 0, preserveKeys: true)
->all();
$itemsBeforeThemeSwitcher = $itemsBeforeAndAfterThemeSwitcher[true] ?? collect();
$itemsAfterThemeSwitcher = $itemsBeforeAndAfterThemeSwitcher[false] ?? collect();
$hasProfileHeader = $itemsBeforeThemeSwitcher->has('profile') &&
blank(($item = Arr::first($itemsBeforeThemeSwitcher))->getUrl()) &&
(! $item->hasAction());
if ($itemsBeforeThemeSwitcher->has('profile')) {
$itemsBeforeThemeSwitcher = $itemsBeforeThemeSwitcher->prepend($itemsBeforeThemeSwitcher->pull('profile'), 'profile');
}
$position ??= filament()->getUserMenuPosition();
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_BEFORE)); ?>
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => ($position === UserMenuPosition::Topbar) ? 'bottom-end' : 'top-end','teleport' => $position === UserMenuPosition::Topbar,'attributes' =>
\Filament\Support\prepare_inherited_attributes($attributes)
->class(['fi-user-menu'])
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['placement' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(($position === UserMenuPosition::Topbar) ? 'bottom-end' : 'top-end'),'teleport' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($position === UserMenuPosition::Topbar),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
\Filament\Support\prepare_inherited_attributes($attributes)
->class(['fi-user-menu'])
)]); ?>
<?php $__env->slot('trigger', null, []); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($position === UserMenuPosition::Topbar): ?>
<button
aria-label="<?php echo e(__('filament-panels::layout.actions.open_user_menu.label')); ?>"
type="button"
class="fi-user-menu-trigger"
>
<?php if (isset($component)) { $__componentOriginalceea4679a368984135244eacf4aafeca = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalceea4679a368984135244eacf4aafeca = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.avatar.user','data' => ['user' => $user,'loading' => 'lazy']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::avatar.user'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['user' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($user),'loading' => 'lazy']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalceea4679a368984135244eacf4aafeca)): ?>
<?php $attributes = $__attributesOriginalceea4679a368984135244eacf4aafeca; ?>
<?php unset($__attributesOriginalceea4679a368984135244eacf4aafeca); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalceea4679a368984135244eacf4aafeca)): ?>
<?php $component = $__componentOriginalceea4679a368984135244eacf4aafeca; ?>
<?php unset($__componentOriginalceea4679a368984135244eacf4aafeca); ?>
<?php endif; ?>
</button>
<?php else: ?>
<button
aria-label="<?php echo e(__('filament-panels::layout.actions.open_user_menu.label')); ?>"
type="button"
class="fi-user-menu-trigger"
>
<?php if (isset($component)) { $__componentOriginalceea4679a368984135244eacf4aafeca = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalceea4679a368984135244eacf4aafeca = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.avatar.user','data' => ['user' => $user,'loading' => 'lazy']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::avatar.user'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['user' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($user),'loading' => 'lazy']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalceea4679a368984135244eacf4aafeca)): ?>
<?php $attributes = $__attributesOriginalceea4679a368984135244eacf4aafeca; ?>
<?php unset($__attributesOriginalceea4679a368984135244eacf4aafeca); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalceea4679a368984135244eacf4aafeca)): ?>
<?php $component = $__componentOriginalceea4679a368984135244eacf4aafeca; ?>
<?php unset($__componentOriginalceea4679a368984135244eacf4aafeca); ?>
<?php endif; ?>
<span
<?php if($isSidebarCollapsibleOnDesktop): ?>
x-show="$store.sidebar.isOpen"
<?php endif; ?>
class="fi-user-menu-trigger-text"
>
<?php echo e(filament()->getUserName($user)); ?>
</span>
<?php echo e(\Filament\Support\generate_icon_html(\Filament\Support\Icons\Heroicon::ChevronUp, alias: \Filament\View\PanelsIconAlias::USER_MENU_TOGGLE_BUTTON, attributes: new \Illuminate\View\ComponentAttributeBag([
'x-show' => $isSidebarCollapsibleOnDesktop ? '$store.sidebar.isOpen' : null,
]))); ?>
</button>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php $__env->endSlot(); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasProfileHeader): ?>
<?php
$item = $itemsBeforeThemeSwitcher['profile'];
$itemColor = $item->getColor();
$itemIcon = $item->getIcon();
unset($itemsBeforeThemeSwitcher['profile']);
?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE)); ?>
<?php if (isset($component)) { $__componentOriginal7a83b62094aac4ed8d85f403cf23f250 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.header','data' => ['color' => $itemColor,'icon' => $itemIcon]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.header'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemColor),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon)]); ?>
<?php echo e($item->getLabel()); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
<?php $attributes = $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
<?php unset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
<?php $component = $__componentOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
<?php unset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
<?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemsBeforeThemeSwitcher->isNotEmpty()): ?>
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $itemsBeforeThemeSwitcher; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $key => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($key === 'profile'): ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE)); ?>
<?php echo e($item); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER)); ?>
<?php else: ?>
<?php echo e($item); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasDarkMode() && (! filament()->hasDarkModeForced())): ?>
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php if (isset($component)) { $__componentOriginal388e1416f496c833c11c2ba7d86d1f07 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal388e1416f496c833c11c2ba7d86d1f07 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::theme-switcher'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal388e1416f496c833c11c2ba7d86d1f07)): ?>
<?php $attributes = $__attributesOriginal388e1416f496c833c11c2ba7d86d1f07; ?>
<?php unset($__attributesOriginal388e1416f496c833c11c2ba7d86d1f07); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal388e1416f496c833c11c2ba7d86d1f07)): ?>
<?php $component = $__componentOriginal388e1416f496c833c11c2ba7d86d1f07; ?>
<?php unset($__componentOriginal388e1416f496c833c11c2ba7d86d1f07); ?>
<?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemsAfterThemeSwitcher->isNotEmpty()): ?>
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $itemsAfterThemeSwitcher; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $key => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($key === 'profile'): ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE)); ?>
<?php echo e($item); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER)); ?>
<?php else: ?>
<?php echo e($item); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_AFTER)); ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/user-menu.blade.php ENDPATH**/ ?>
@@ -0,0 +1,29 @@
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['class' => 'fi-wi-table']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-widgets::widget'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['class' => 'fi-wi-table']); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\Widgets\View\WidgetsRenderHook::TABLE_WIDGET_START, scopes: static::class)); ?>
<?php echo e($this->table); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\Widgets\View\WidgetsRenderHook::TABLE_WIDGET_END, scopes: static::class)); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/table-widget.blade.php ENDPATH**/ ?>
@@ -0,0 +1,793 @@
<?php $__env->startSection('title', 'Request Custom Design - Additional Design'); ?>
<?php $__env->startSection('styles'); ?>
<style>
.page-intro {
margin-bottom: var(--spacing-lg);
}
.page-intro h1 {
font-family: 'Abril Fatface', cursive;
font-size: 2.5rem;
color: var(--text-primary);
margin-bottom: 0.5rem;
}
.page-intro p {
color: var(--text-secondary);
font-size: 1.1rem;
}
.form-card {
margin-bottom: var(--spacing-lg);
max-width: 700px;
}
.form-section h2 {
font-family: 'Abril Fatface', cursive;
font-size: 1.6rem;
color: var(--text-primary);
/* margin-bottom: var(--spacing-md); */
}
.form-section {
/* margin-bottom: var(--spacing-lg); */
}
.form-section:last-child {
margin-bottom: 0;
}
.form-group {
margin-bottom: var(--spacing-md);
}
.form-group label {
display: block;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.5rem;
}
.form-group-hint {
font-size: 0.9rem;
color: var(--text-secondary);
margin-bottom: 0.75rem;
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--spacing-sm);
}
.form-row.full {
grid-template-columns: 1fr;
}
.form-group input,
.form-group textarea,
.form-group select {
width: 100%;
padding: 0.75rem;
border: 1px solid var(--border-color);
border-radius: 4px;
font-size: 1rem;
font-family: inherit;
background-color: white;
box-sizing: border-box;
}
.form-group input:focus,
.form-group textarea:focus,
.form-group select:focus {
outline: none;
border-color: var(--accent-dark);
box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.05);
}
.form-group textarea {
resize: vertical;
min-height: 120px;
}
.upload-area {
border: 2px dashed var(--border-color);
border-radius: 8px;
padding: var(--spacing-lg);
text-align: center;
cursor: pointer;
transition: var(--transition);
background-color: var(--bg-primary);
}
.upload-area:hover {
border-color: var(--accent-dark);
background-color: var(--bg-secondary);
}
.upload-area svg {
width: 48px;
height: 48px;
color: var(--text-secondary);
margin: 0 auto var(--spacing-sm);
}
.upload-area p {
margin: 0.25rem 0;
}
.upload-area .hint {
font-size: 0.85rem;
color: var(--text-secondary);
}
.file-item {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem;
background-color: var(--bg-secondary);
border-radius: 4px;
margin-top: 0.5rem;
font-size: 0.9rem;
}
.file-item svg {
width: 18px;
height: 18px;
color: var(--accent-dark);
flex-shrink: 0;
}
.checkbox-group {
padding: var(--spacing-md);
background-color: var(--bg-secondary);
border-radius: 20px;
margin-bottom: var(--spacing-md);
}
.checkbox-option {
display: flex;
gap: var(--spacing-md);
cursor: pointer;
}
.checkbox-option input[type="checkbox"] {
margin-top: 2px;
cursor: pointer;
}
.checkbox-content p {
margin-bottom: 0.5rem;
}
.button-group {
display: flex;
gap: var(--spacing-md);
margin-top: var(--spacing-lg);
}
.button-group .btn {
flex: 1;
}
.btn-cancel {
background-color: var(--bg-secondary) !important;
color: var(--text-primary) !important;
border: 1px solid var(--border-color) !important;
}
.btn-cancel:hover {
background-color: var(--border-color) !important;
color: var(--text-primary) !important;
}
.error-message {
color: #c53030;
font-size: 0.9rem;
margin-top: 0.5rem;
}
.info-box {
margin-bottom: var(--spacing-lg);
}
.info-box h3 {
font-family: var(--font-sans);
font-size: 1.2rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: var(--spacing-md);
margin-top: 0;
}
.info-box ul {
list-style-position: inside;
margin: 0;
padding: 0;
}
.info-box li {
margin-bottom: 0.5rem;
}
.form-wrapper {
display: grid;
grid-template-columns: 1fr 450px;
gap: var(--spacing-lg);
margin-bottom: var(--spacing-lg);
}
.cost-summary {
height: fit-content;
position: sticky;
top: 120px;
}
.cost-summary-content {
margin-bottom: var(--spacing-md);
}
.cost-summary-content h3 {
font-family: 'Abril Fatface', cursive;
font-size: 1.3rem;
color: var(--text-primary);
margin-bottom: var(--spacing-md);
}
.cost-item {
display: flex;
justify-content: space-between;
padding: var(--spacing-sm) 0;
border-bottom: 1px solid var(--border-color);
font-size: 0.95rem;
}
.cost-item.total {
font-weight: 700;
font-size: 1.1rem;
border-top: 2px solid var(--accent-dark);
border-bottom: none;
margin-top: var(--spacing-md);
padding-top: var(--spacing-md);
color: var(--accent-dark);
}
.cost-label {
color: var(--text-secondary);
}
.cost-value {
font-weight: 600;
color: var(--text-primary);
}
.cost-item.total .cost-value {
color: var(--accent-dark);
}
.design-fee-note {
font-size: 0.85rem;
color: var(--text-secondary);
margin-top: var(--spacing-md);
padding-top: var(--spacing-md);
border-top: 1px solid var(--border-color);
}
.cost-item.disabled {
opacity: 0.5;
color: var(--text-secondary);
}
.cost-item.discount {
color: var(--accent-pink);
}
.cost-item.discount .cost-value {
color: var(--accent-pink);
}
@media (max-width: 768px) {
.form-wrapper {
grid-template-columns: 1fr;
}
.cost-summary-content {
position: static;
}
.form-card {
padding: var(--spacing-md);
}
.form-row {
grid-template-columns: 1fr;
}
.button-group {
flex-direction: column;
}
}
</style>
<?php $__env->stopSection(); ?>
<?php $__env->startSection('content'); ?>
<div class="container" style="padding:20px;">
<div class="page-intro">
<h1>Request Custom Design</h1>
<p>Create a custom wallpaper, mural, or fabric design tailored to your needs</p>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($errors->any()): ?>
<div style="background-color: #f8d7da; border: 1px solid var(--border-color); color: var(--text-primary); padding: var(--spacing-md); border-radius: 8px; margin-bottom: var(--spacing-lg);">
<h4 style="margin-top: 0;">Please correct the following errors:</h4>
<ul>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $errors->all(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $error): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<li><?php echo e($error); ?></li>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</ul>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('success')): ?>
<div style="background-color: var(--accent-light); border: 1px solid var(--border-color); color: var(--text-primary); padding: var(--spacing-md); border-radius: 8px; margin-bottom: var(--spacing-lg);">
<?php echo e(session('success')); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Info Box -->
<div class="info-box card--pink">
<h2>How It Works</h2>
<ul>
<li>Submit your custom order with design specifications and reference images</li>
<li>Pay a 20% non-refundable deposit to commence design work</li>
<li>Our team creates your design and prepares proofs for review</li>
<li>Pay the remaining 80% balance to proceed with printing and shipping</li>
</ul>
</div>
<!-- Form -->
<div class="form-wrapper">
<form action="<?php echo e(route('custom-orders.store')); ?>" method="POST" enctype="multipart/form-data" id="custom-order-form" class="form-card card" data-action="<?php echo e(route('custom-orders.store')); ?>">
<?php echo csrf_field(); ?>
<!-- Order Type & Dimensions -->
<div class="form-section">
<h2>Order Details</h2>
<div class="form-group">
<label for="type">Order Type *</label>
<select id="type" name="type" required>
<option value="">-- Select a type --</option>
<option value="wallpaper" <?php echo e(old('type') == 'wallpaper' ? 'selected' : ''); ?>>Wallpaper (tileable pattern)</option>
<option value="mural" <?php echo e(old('type') == 'mural' ? 'selected' : ''); ?>>Mural (large format)</option>
<option value="fabric" <?php echo e(old('type') == 'fabric' ? 'selected' : ''); ?>>Fabric (linear meter)</option>
</select>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['type'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="form-row">
<div class="form-group">
<label for="width">Width (meters) *</label>
<input type="number" id="width" name="width" step="0.01" min="0.1" value="<?php echo e(old('width')); ?>" required>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['width'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="form-group">
<label for="height">Height (meters) *</label>
<input type="number" id="height" name="height" step="0.01" min="0.1" value="<?php echo e(old('height')); ?>" required>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['height'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="quantity">Quantity *</label>
<input type="number" id="quantity" name="quantity" value="<?php echo e(old('quantity', 1)); ?>" min="1" required>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['quantity'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="form-group">
<label for="print_stock_id">Print Material *</label>
<select id="print_stock_id" name="print_stock_id" required>
<option value="">-- Select material --</option>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $printStocks; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $stock): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<option value="<?php echo e($stock->id); ?>" <?php echo e(old('print_stock_id') == $stock->id ? 'selected' : ''); ?>>
<?php echo e($stock->name); ?> (<?php echo e($stock->cost_per_meter ? 'R' . number_format($stock->cost_per_meter, 2) . '/m' : 'R' . number_format($stock->cost_per_m2, 2) . '/m²'); ?>)
</option>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</select>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['print_stock_id'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
</div>
<!-- Design Brief -->
<div class="form-section">
<h2>Design Brief</h2>
<div class="form-group form-row full">
<label for="customer_brief">Design Brief (minimum 50 characters) *</label>
<p class="form-group-hint">Tell us about your design concept, colors, style, and any specific requirements</p>
<textarea id="customer_brief" name="customer_brief" placeholder="Describe your custom design vision..." minlength="50" required><?php echo e(old('customer_brief')); ?></textarea>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['customer_brief'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="form-group form-row full">
<label for="special_instructions">Special Instructions (optional)</label>
<textarea id="special_instructions" name="special_instructions" placeholder="Any additional notes or requirements..."><?php echo e(old('special_instructions')); ?></textarea>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['special_instructions'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
<!-- Reference Images -->
<div class="form-section">
<h2>Reference Images</h2>
<div class="form-group form-row full">
<label>Upload Reference Images</label>
<p class="form-group-hint">Upload inspiration images, mood boards, or reference materials for your design</p>
<div class="upload-area" onclick="document.getElementById('reference-images').click()">
<input type="file" id="reference-images" name="reference_images[]" multiple accept="image/*" style="display: none;">
<svg fill="none" stroke="currentColor" viewBox="0 0 48 48">
<path d="M28 8H12a4 4 0 00-4 4v20m32-12v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-12l-3.172-3.172a4 4 0 00-5.656 0L28 12M12 32l3.172-3.172a4 4 0 015.656 0L32 32" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<p style="margin: 0;">Click to upload or drag and drop</p>
<p class="hint">PNG, JPG, GIF, WebP up to 5MB</p>
</div>
<div id="file-list"></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['reference_images.*'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?>
<p class="error-message"><?php echo e($message); ?></p>
<?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</div>
<!-- Library Agreement -->
<div class="form-section">
<h2>Design Library</h2>
<div class="checkbox-group">
<label class="checkbox-option">
<input type="checkbox" name="library_discount" value="1" <?php echo e(old('library_discount') ? 'checked' : ''); ?>>
<div class="checkbox-content">
<p style="font-weight: 600; margin-bottom: 0.25rem;">Allow us to use your design in our library</p>
<p>If you agree, we'll apply a <strong>20% discount to the design fee</strong>. This means we may offer similar designs to other customers in the future.</p>
</div>
</label>
</div>
</div>
<!-- Submit Buttons -->
<div class="button-group">
<button type="submit" class="btn">Submit Order</button>
<a href="<?php echo e(route('my-orders')); ?>" class="btn btn-cancel">Cancel</a>
</div>
</form>
<!-- Cost Summary Sidebar -->
<div class="cost-summary">
<div class="cost-summary-content card">
<h3>Cost Summary</h3>
<div class="cost-item disabled" id="material-cost-item">
<span class="cost-label">Material Cost</span>
<span class="cost-value">-</span>
</div>
<div class="cost-item disabled" id="design-fee-item">
<span class="cost-label">Design Fee</span>
<span class="cost-value">-</span>
</div>
<div class="cost-item disabled" id="discount-item" style="display: none;">
<span class="cost-label">Library Discount</span>
<span class="cost-value">-</span>
</div>
<div class="cost-item total">
<span>Deposit Required (20%)</span>
<span class="cost-value" id="deposit-amount">R0.00</span>
</div>
<div class="design-fee-note">
<strong>Note:</strong> 20% non-refundable deposit covers design work. Pay the remaining 80% after proof approval.
</div>
</div>
<div class="card" style="padding: 1.5rem; margin-bottom: 1rem; background: var(--accent-light);">
<p style="margin: 0 0 0.5rem 0; color: black;">Estimated Total:</p>
<div style="font-family: 'Abril Fatface', cursive; font-size: 3rem; font-weight: 400; color: white;">R<span id="total-cost">0.00</span></div>
<small style="color: #fff; display: block; margin-top: 0.5rem;">incl. VAT</small>
</div>
</div>
<!-- Total Cost Display -->
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
console.log('=== CUSTOM ORDER FORM DEBUG ===');
const form = document.getElementById('custom-order-form');
console.log('Form element:', form);
console.log('Form action:', form.action);
console.log('Form method:', form.method);
console.log('Form enctype:', form.enctype);
console.log('Form ID:', form.id);
console.log('Form classes:', form.className);
if (!form) {
console.error('FORM NOT FOUND!');
return;
}
// ===== COST CALCULATION =====
const DESIGN_FEE = 500; // Base design fee in Rands
const DISCOUNT_PERCENTAGE = 0.20; // 20% discount for library usage
// Get form inputs
const typeSelect = document.getElementById('type');
const widthInput = document.getElementById('width');
const heightInput = document.getElementById('height');
const quantityInput = document.getElementById('quantity');
const stockSelect = document.getElementById('print_stock_id');
const libraryCheckbox = document.querySelector('input[name="library_discount"]');
// Get summary elements
const materialCostItem = document.getElementById('material-cost-item');
const designFeeItem = document.getElementById('design-fee-item');
const discountItem = document.getElementById('discount-item');
const depositAmount = document.getElementById('deposit-amount');
// Store print stocks data
const printStocksData = {};
<?php $__currentLoopData = $printStocks; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $stock): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
printStocksData[<?php echo e($stock->id); ?>] = {
name: '<?php echo e($stock->name); ?>',
width: <?php echo e($stock->width ?? 0.53); ?>,
costPerMeter: <?php echo e($stock->cost_per_meter ?? 0); ?>,
costPerM2: <?php echo e($stock->cost_per_m2 ?? 0); ?>
};
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
function calculateCosts() {
const type = typeSelect.value;
const width = parseFloat(widthInput.value) || 0;
const height = parseFloat(heightInput.value) || 0;
const quantity = parseFloat(quantityInput.value) || 1;
const stockId = stockSelect.value;
const hasLibraryDiscount = libraryCheckbox?.checked || false;
if (!type || !stockId || width <= 0 || height <= 0) {
// Show disabled state
materialCostItem.classList.add('disabled');
designFeeItem.classList.add('disabled');
discountItem.style.display = 'none';
depositAmount.textContent = 'R0.00';
document.getElementById('total-cost').textContent = '0.00';
document.getElementById('cost-breakdown').textContent = '';
return;
}
const stock = printStocksData[stockId];
if (!stock) return;
// Calculate material cost based on type
let materialCost = 0;
let breakdown = '';
if (type === 'wallpaper') {
// Wallpaper: Takes into account stock width
// Calculate number of vertical strips needed: ceil(wall_height / stock_width)
// Calculate total length: number_of_strips × wall_width
// Cost = total_length × cost_per_meter × quantity
const stockWidth = stock.width || 0.53; // Default to standard wallpaper width if not specified
const stripsNeeded = Math.ceil(height / stockWidth);
const totalLength = stripsNeeded * width;
materialCost = totalLength * stock.costPerMeter * quantity;
breakdown = `Stock: R${stock.costPerMeter.toFixed(2)}/m × ${totalLength.toFixed(2)}m`;
} else if (type === 'mural') {
// Mural: width × height in m²
// Cost = cost_per_m2 × (width × height) × quantity
const area = width * height;
materialCost = area * stock.costPerM2 * quantity;
breakdown = `Stock: R${stock.costPerM2.toFixed(2)}/m² × ${area.toFixed(2)}m²`;
} else if (type === 'fabric') {
// Fabric: width input = length in linear meters
// Cost = cost_per_meter × length × quantity
materialCost = width * stock.costPerMeter * quantity;
breakdown = `Stock: R${stock.costPerMeter.toFixed(2)}/m × ${width.toFixed(2)}m`;
}
// Calculate design fee
let designFee = DESIGN_FEE;
let discount = 0;
if (hasLibraryDiscount) {
discount = designFee * DISCOUNT_PERCENTAGE;
designFee -= discount;
}
// Total cost
const totalCost = materialCost + designFee;
const depositRequired = totalCost * 0.20; // 20% deposit
const remainingBalance = totalCost * 0.80; // 80% remaining
// Update UI
materialCostItem.classList.remove('disabled');
materialCostItem.innerHTML = `<span class="cost-label">Material Cost</span><span class="cost-value">R${materialCost.toFixed(2)}</span>`;
designFeeItem.classList.remove('disabled');
designFeeItem.innerHTML = `<span class="cost-label">Design Fee</span><span class="cost-value">R${designFee.toFixed(2)}</span>`;
if (hasLibraryDiscount && discount > 0) {
discountItem.style.display = 'flex';
discountItem.classList.add('discount');
discountItem.innerHTML = `<span class="cost-label">Library Discount (20%)</span><span class="cost-value">-R${discount.toFixed(2)}</span>`;
} else {
discountItem.style.display = 'none';
}
depositAmount.textContent = `R${depositRequired.toFixed(2)}`;
document.getElementById('total-cost').textContent = `${totalCost.toFixed(2)}`;
document.getElementById('cost-breakdown').textContent = breakdown;
}
// Add event listeners for cost calculation
if (typeSelect) typeSelect.addEventListener('change', calculateCosts);
if (widthInput) widthInput.addEventListener('input', calculateCosts);
if (heightInput) heightInput.addEventListener('input', calculateCosts);
if (quantityInput) quantityInput.addEventListener('input', calculateCosts);
if (stockSelect) stockSelect.addEventListener('change', calculateCosts);
if (libraryCheckbox) libraryCheckbox.addEventListener('change', calculateCosts);
// Update field labels based on type
function updateFieldLabels() {
const type = typeSelect.value;
const widthLabel = document.querySelector('label[for="width"]');
const heightLabel = document.querySelector('label[for="height"]');
const heightGroup = heightInput?.parentElement;
if (type === 'wallpaper') {
if (widthLabel) widthLabel.innerHTML = 'Wall Width (meters) *';
if (heightLabel) heightLabel.innerHTML = 'Wall Height (meters) *<br><small style="font-weight: normal; color: var(--text-secondary); display: block; margin-top: 0.25rem;">The system will calculate strips needed based on stock width</small>';
if (heightGroup) heightGroup.style.display = 'block';
} else if (type === 'mural') {
if (widthLabel) widthLabel.textContent = 'Width (meters) *';
if (heightGroup) heightGroup.style.display = 'block';
if (heightLabel) heightLabel.textContent = 'Height (meters) *';
} else if (type === 'fabric') {
if (widthLabel) widthLabel.textContent = 'Length (meters) *';
if (heightGroup) heightGroup.style.display = 'none';
}
}
if (typeSelect) {
typeSelect.addEventListener('change', updateFieldLabels);
}
// Initial label update
updateFieldLabels();
// Initial calculation
calculateCosts();
// Handle reference image uploads
const referenceImagesInput = document.getElementById('reference-images');
if (referenceImagesInput) {
referenceImagesInput.addEventListener('change', function() {
const fileList = document.getElementById('file-list');
if (fileList) {
fileList.innerHTML = '';
for (let file of this.files) {
const item = document.createElement('div');
item.className = 'file-item';
item.innerHTML = `<svg fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4z" clip-rule="evenodd"/></svg><span>${file.name}</span>`;
fileList.appendChild(item);
}
}
});
}
// Find the submit button and log when it's clicked
const submitBtn = form.querySelector('button[type="submit"]');
if (submitBtn) {
console.log('Submit button found:', submitBtn);
submitBtn.addEventListener('click', function(e) {
console.log('===== SUBMIT BUTTON CLICKED =====');
console.log('Event:', e);
console.log('Form will submit to:', form.action);
});
}
// Handle form submission - FORCE IT TO SUBMIT
form.addEventListener('submit', function(e) {
console.log('===== FORM SUBMIT EVENT FIRED =====');
console.log('Event type:', e.type);
console.log('Event defaultPrevented:', e.defaultPrevented);
console.log('Action:', form.action);
console.log('Method:', form.method);
console.log('About to submit to:', form.action);
console.log('Checking if global script should skip this form...');
console.log('Form action includes /custom-orders:', form.action.includes('/custom-orders'));
// Don't prevent - let it submit naturally
});
console.log('Event listeners attached successfully');
});
</script>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/custom-orders/create.blade.php ENDPATH**/ ?>
@@ -0,0 +1,517 @@
<div class="fi-topbar-ctn">
<?php
$isRtl = __('filament-panels::layout.direction') === 'rtl';
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
$hasTopNavigation = filament()->hasTopNavigation();
$hasNavigation = filament()->hasNavigation();
$hasTenancy = filament()->hasTenancy();
?>
<nav class="fi-topbar">
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_START)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasNavigation): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::OutlinedBars3,'iconAlias' => \Filament\View\PanelsIconAlias::TOPBAR_OPEN_SIDEBAR_BUTTON,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','xShow' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::OutlinedBars3),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::TOPBAR_OPEN_SIDEBAR_BUTTON),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','x-show' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-sidebar-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::OutlinedXMark,'iconAlias' => \Filament\View\PanelsIconAlias::TOPBAR_CLOSE_SIDEBAR_BUTTON,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.collapse.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.close()','xShow' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::OutlinedXMark),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::TOPBAR_CLOSE_SIDEBAR_BUTTON),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.collapse.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.close()','x-show' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-sidebar-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="fi-topbar-start">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
<div
x-show="$store.sidebar.isOpen || <?php echo \Illuminate\Support\Js::from($isSidebarCollapsibleOnDesktop)->toHtml() ?>"
class="fi-topbar-collapse-sidebar-btn-ctn"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($isSidebarCollapsibleOnDesktop): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight,'iconAlias' =>
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','xShow' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','x-show' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-collapse-sidebar-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft,'iconAlias' =>
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.collapse.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.close()','xShow' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::icon-button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
$isRtl
? [
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
]
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.collapse.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.close()','x-show' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-collapse-sidebar-btn']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_LOGO_BEFORE)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($homeUrl = filament()->getHomeUrl()): ?>
<a <?php echo e(\Filament\Support\generate_href_html($homeUrl)); ?>>
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::logo'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
</a>
<?php else: ?>
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::logo'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_LOGO_AFTER)); ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasTopNavigation || (! $hasNavigation)): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasTenancy && filament()->hasTenantMenu()): ?>
<?php if (isset($component)) { $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.tenant-menu','data' => ['teleport' => true]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::tenant-menu'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['teleport' => true]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
<?php $attributes = $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
<?php unset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
<?php $component = $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
<?php unset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasNavigation): ?>
<?php
$navigation = filament()->getNavigation();
?>
<ul class="fi-topbar-nav-groups">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $navigation; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $group): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$groupLabel = $group->getLabel();
$groupExtraTopbarAttributeBag = $group->getExtraTopbarAttributeBag();
$isGroupActive = $group->isActive();
$groupIcon = $group->getIcon();
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($groupLabel): ?>
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => 'bottom-start','teleport' => true,'attributes' => \Filament\Support\prepare_inherited_attributes($groupExtraTopbarAttributeBag)]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['placement' => 'bottom-start','teleport' => true,'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\prepare_inherited_attributes($groupExtraTopbarAttributeBag))]); ?>
<?php $__env->slot('trigger', null, []); ?>
<?php if (isset($component)) { $__componentOriginal42035aa49c877d648231e14ff76681c7 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal42035aa49c877d648231e14ff76681c7 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.topbar.item','data' => ['active' => $isGroupActive,'icon' => $groupIcon]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::topbar.item'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isGroupActive),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupIcon)]); ?>
<?php echo e($groupLabel); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal42035aa49c877d648231e14ff76681c7)): ?>
<?php $attributes = $__attributesOriginal42035aa49c877d648231e14ff76681c7; ?>
<?php unset($__attributesOriginal42035aa49c877d648231e14ff76681c7); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal42035aa49c877d648231e14ff76681c7)): ?>
<?php $component = $__componentOriginal42035aa49c877d648231e14ff76681c7; ?>
<?php unset($__componentOriginal42035aa49c877d648231e14ff76681c7); ?>
<?php endif; ?>
<?php $__env->endSlot(); ?>
<?php
$lists = [];
foreach ($group->getItems() as $item) {
if ($childItems = $item->getChildItems()) {
$lists[] = [
$item,
...$childItems,
];
$lists[] = [];
continue;
}
if (empty($lists)) {
$lists[] = [$item];
continue;
}
$lists[count($lists) - 1][] = $item;
}
if (empty($lists[count($lists) - 1])) {
array_pop($lists);
}
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $lists; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $list): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $list; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$isItemActive = $item->isActive();
$itemBadge = $item->getBadge();
$itemBadgeColor = $item->getBadgeColor();
$itemBadgeTooltip = $item->getBadgeTooltip();
$itemUrl = $item->getUrl();
$itemIcon = $isItemActive ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon();
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
?>
<?php if (isset($component)) { $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.item','data' => ['badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'color' => $isItemActive ? 'primary' : 'gray','href' => $itemUrl,'icon' => $itemIcon,'tag' => 'a','target' => $shouldItemOpenUrlInNewTab ? '_blank' : null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown.list.item'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemActive ? 'primary' : 'gray'),'href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'tag' => 'a','target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab ? '_blank' : null)]); ?>
<?php echo e($item->getLabel()); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
<?php $attributes = $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
<?php unset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
<?php $component = $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
<?php unset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php else: ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $group->getItems(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$isItemActive = $item->isActive();
$itemActiveIcon = $item->getActiveIcon();
$itemBadge = $item->getBadge();
$itemBadgeColor = $item->getBadgeColor();
$itemBadgeTooltip = $item->getBadgeTooltip();
$itemIcon = $item->getIcon();
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
$itemUrl = $item->getUrl();
?>
<?php if (isset($component)) { $__componentOriginal42035aa49c877d648231e14ff76681c7 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal42035aa49c877d648231e14ff76681c7 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.topbar.item','data' => ['active' => $isItemActive,'activeIcon' => $itemActiveIcon,'badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'icon' => $itemIcon,'shouldOpenUrlInNewTab' => $shouldItemOpenUrlInNewTab,'url' => $itemUrl]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::topbar.item'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemActive),'active-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemActiveIcon),'badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'should-open-url-in-new-tab' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab),'url' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl)]); ?>
<?php echo e($item->getLabel()); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal42035aa49c877d648231e14ff76681c7)): ?>
<?php $attributes = $__attributesOriginal42035aa49c877d648231e14ff76681c7; ?>
<?php unset($__attributesOriginal42035aa49c877d648231e14ff76681c7); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal42035aa49c877d648231e14ff76681c7)): ?>
<?php $component = $__componentOriginal42035aa49c877d648231e14ff76681c7; ?>
<?php unset($__componentOriginal42035aa49c877d648231e14ff76681c7); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</ul>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div
<?php if($hasTenancy): ?>
x-persist="topbar.end.panel-<?php echo e(filament()->getId()); ?>.tenant-<?php echo e(filament()->getTenant()?->getKey()); ?>"
<?php else: ?>
x-persist="topbar.end.panel-<?php echo e(filament()->getId()); ?>"
<?php endif; ?>
class="fi-topbar-end"
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::GLOBAL_SEARCH_BEFORE)); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->isGlobalSearchEnabled() && filament()->getGlobalSearchPosition() === \Filament\Enums\GlobalSearchPosition::Topbar): ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(Filament\Livewire\GlobalSearch::class);
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1441774602-0', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::GLOBAL_SEARCH_AFTER)); ?>
<?php if(filament()->auth()->check()): ?>
<?php if(filament()->hasDatabaseNotifications() && filament()->getDatabaseNotificationsPosition() === \Filament\Enums\DatabaseNotificationsPosition::Topbar): ?>
<?php
$__split = function ($name, $params = []) {
return [$name, $params];
};
[$__name, $__params] = $__split(Filament\Livewire\DatabaseNotifications::class, [
'lazy' => filament()->hasLazyLoadedDatabaseNotifications(),
]);
$key = null;
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1441774602-1', null);
$__html = app('livewire')->mount($__name, $__params, $key);
echo $__html;
unset($__html);
unset($__name);
unset($__params);
unset($__split);
if (isset($__slots)) unset($__slots);
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(filament()->hasUserMenu() && filament()->getUserMenuPosition() === \Filament\Enums\UserMenuPosition::Topbar): ?>
<?php if (isset($component)) { $__componentOriginalf72c4437b846e6919081d8fc29939c50 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalf72c4437b846e6919081d8fc29939c50 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.user-menu','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::user-menu'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalf72c4437b846e6919081d8fc29939c50)): ?>
<?php $attributes = $__attributesOriginalf72c4437b846e6919081d8fc29939c50; ?>
<?php unset($__attributesOriginalf72c4437b846e6919081d8fc29939c50); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalf72c4437b846e6919081d8fc29939c50)): ?>
<?php $component = $__componentOriginalf72c4437b846e6919081d8fc29939c50; ?>
<?php unset($__componentOriginalf72c4437b846e6919081d8fc29939c50); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_END)); ?>
</nav>
<?php if (isset($component)) { $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-actions::components.modals','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-actions::modals'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
<?php $attributes = $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
<?php unset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
<?php $component = $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
<?php unset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
<?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/livewire/topbar.blade.php ENDPATH**/ ?>
@@ -0,0 +1,82 @@
<!-- Inspection Actions -->
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
<h2 class="text-2xl font-bold mb-4">🔍 Inspection</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- Inspection Passed -->
<div class="border-2 border-green-200 rounded-lg p-4">
<h3 class="text-lg font-semibold text-green-700 mb-3"> Passed Inspection</h3>
<p class="text-gray-600 mb-4">Quality check completed - proceed to packing</p>
<form action="<?php echo e(route('ops.order.inspection-passed', $order)); ?>" method="POST">
<?php echo csrf_field(); ?>
<button
type="submit"
class="w-full bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-4 rounded transition duration-200"
>
Mark as Passed
</button>
</form>
</div>
<!-- Inspection Failed -->
<div class="border-2 border-red-200 rounded-lg p-4">
<h3 class="text-lg font-semibold text-red-700 mb-3"> Flag Issue</h3>
<p class="text-gray-600 mb-4">Quality issue detected - needs review</p>
<form id="inspectionFailedForm" action="<?php echo e(route('ops.order.inspection-failed', $order)); ?>" method="POST" class="space-y-3">
<?php echo csrf_field(); ?>
<textarea
name="issue_description"
required
maxlength="500"
rows="3"
placeholder="Describe the quality issue..."
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-red-500"
></textarea>
<button
type="submit"
class="w-full bg-red-600 hover:bg-red-700 text-white font-bold py-2 px-4 rounded transition duration-200"
>
Flag & Move to Review
</button>
</form>
<script>
document.getElementById('inspectionFailedForm').addEventListener('submit', async function(e) {
e.preventDefault();
if (!confirm('Flag this order for review? It will be moved to review status.')) {
return;
}
const formData = new FormData(this);
try {
const response = await fetch(this.action, {
method: 'POST',
headers: {
'Accept': 'application/json',
},
body: formData,
});
const data = await response.json();
if (response.ok) {
alert('✓ Issue flagged - order moved to review');
window.location.reload();
} else {
alert('Error: ' + (data.message || data.error || 'Unknown error'));
}
} catch (error) {
alert('Error submitting form: ' + error.message);
}
});
</script>
</div>
</div>
</div>
<?php /**PATH /var/www/additional_design/resources/views/ops/actions/inspection.blade.php ENDPATH**/ ?>
@@ -0,0 +1,212 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'alpineDisabled' => null,
'alpineValid' => null,
'disabled' => false,
'inlinePrefix' => false,
'inlineSuffix' => false,
'prefix' => null,
'prefixActions' => [],
'prefixIcon' => null,
'prefixIconColor' => 'gray',
'prefixIconAlias' => null,
'suffix' => null,
'suffixActions' => [],
'suffixIcon' => null,
'suffixIconColor' => 'gray',
'suffixIconAlias' => null,
'valid' => true,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'alpineDisabled' => null,
'alpineValid' => null,
'disabled' => false,
'inlinePrefix' => false,
'inlineSuffix' => false,
'prefix' => null,
'prefixActions' => [],
'prefixIcon' => null,
'prefixIconColor' => 'gray',
'prefixIconAlias' => null,
'suffix' => null,
'suffixActions' => [],
'suffixIcon' => null,
'suffixIconColor' => 'gray',
'suffixIconAlias' => null,
'valid' => true,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
use Filament\Support\View\Components\InputComponent\WrapperComponent\IconComponent;
use Illuminate\View\ComponentAttributeBag;
$prefixActions = array_filter(
$prefixActions,
fn (\Filament\Actions\Action $prefixAction): bool => $prefixAction->isVisible(),
);
$suffixActions = array_filter(
$suffixActions,
fn (\Filament\Actions\Action $suffixAction): bool => $suffixAction->isVisible(),
);
$hasPrefix = count($prefixActions) || $prefixIcon || filled($prefix);
$hasSuffix = count($suffixActions) || $suffixIcon || filled($suffix);
$hasAlpineDisabledClasses = filled($alpineDisabled);
$hasAlpineValidClasses = filled($alpineValid);
$hasAlpineClasses = $hasAlpineDisabledClasses || $hasAlpineValidClasses;
$wireTarget = $attributes->whereStartsWith(['wire:target'])->first();
$hasLoadingIndicator = filled($wireTarget);
if ($hasLoadingIndicator) {
$loadingIndicatorTarget = html_entity_decode($wireTarget, ENT_QUOTES);
}
?>
<div
<?php if($hasAlpineClasses): ?>
x-bind:class="{
<?php echo e($hasAlpineDisabledClasses ? "'fi-disabled': {$alpineDisabled}," : null); ?>
<?php echo e($hasAlpineValidClasses ? "'fi-invalid': ! ({$alpineValid})," : null); ?>
}"
<?php endif; ?>
<?php echo e($attributes
->except(['wire:target', 'tabindex'])
->class([
'fi-input-wrp',
'fi-disabled' => (! $hasAlpineClasses) && $disabled,
'fi-invalid' => (! $hasAlpineClasses) && (! $valid),
])); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasPrefix || $hasLoadingIndicator): ?>
<div
<?php if(! $hasPrefix): ?>
wire:loading.delay.<?php echo e(config('filament.livewire_loading_delay', 'default')); ?>.flex
wire:target="<?php echo e($loadingIndicatorTarget); ?>"
wire:key="<?php echo e(\Illuminate\Support\Str::random()); ?>"
<?php endif; ?>
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-input-wrp-prefix',
'fi-input-wrp-prefix-has-content' => $hasPrefix,
'fi-inline' => $inlinePrefix,
'fi-input-wrp-prefix-has-label' => filled($prefix),
]); ?>"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(count($prefixActions)): ?>
<div class="fi-input-wrp-actions">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $prefixActions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $prefixAction): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php echo e($prefixAction); ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\generate_icon_html($prefixIcon, $prefixIconAlias, (new \Illuminate\View\ComponentAttributeBag)
->merge([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
], escape: false)
->color(IconComponent::class, $prefixIconColor))); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => $hasPrefix,
'wire:target' => $hasPrefix ? $loadingIndicatorTarget : null,
]))->color(IconComponent::class, 'gray'))); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($prefix)): ?>
<span class="fi-input-wrp-label">
<?php echo e($prefix); ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div
<?php if($hasLoadingIndicator && (! $hasPrefix)): ?>
<?php if($inlinePrefix): ?>
wire:loading.delay.<?php echo e(config('filament.livewire_loading_delay', 'default')); ?>.class.remove="ps-3"
<?php endif; ?>
wire:target="<?php echo e($loadingIndicatorTarget); ?>"
<?php endif; ?>
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-input-wrp-content-ctn',
'fi-input-wrp-content-ctn-ps' => $hasLoadingIndicator && (! $hasPrefix) && $inlinePrefix,
]); ?>"
>
<?php echo e($slot); ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasSuffix): ?>
<div
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'fi-input-wrp-suffix',
'fi-inline' => $inlineSuffix,
'fi-input-wrp-suffix-has-label' => filled($suffix),
]); ?>"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($suffix)): ?>
<span class="fi-input-wrp-label">
<?php echo e($suffix); ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\generate_icon_html($suffixIcon, $suffixIconAlias, (new \Illuminate\View\ComponentAttributeBag)
->merge([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
], escape: false)
->color(IconComponent::class, $suffixIconColor))); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(count($suffixActions)): ?>
<div class="fi-input-wrp-actions">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $suffixActions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $suffixAction): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php echo e($suffixAction); ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/input/wrapper.blade.php ENDPATH**/ ?>
@@ -0,0 +1,396 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'fullHeight' => false,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'fullHeight' => false,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
use Filament\Pages\Enums\SubNavigationPosition;
$subNavigation = $this->getCachedSubNavigation();
$subNavigationPosition = $this->getSubNavigationPosition();
$widgetData = $this->getWidgetData();
?>
<div
<?php echo e($attributes->class([
'fi-page',
'fi-height-full' => $fullHeight,
'fi-page-has-sub-navigation' => $subNavigation,
"fi-page-has-sub-navigation-{$subNavigationPosition->value}" => $subNavigation,
...$this->getPageClasses(),
])); ?>
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_START, scopes: $this->getRenderHookScopes())); ?>
<div class="fi-page-header-main-ctn">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigation): ?>
<div
class="fi-page-main-sub-navigation-mobile-menu-render-hook-ctn"
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_MOBILE_MENU_BEFORE, scopes: $this->getRenderHookScopes())); ?>
</div>
<?php if (isset($component)) { $__componentOriginalece338083788b9a170af7d25fa4f4976 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalece338083788b9a170af7d25fa4f4976 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.mobile-menu','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::page.sub-navigation.mobile-menu'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalece338083788b9a170af7d25fa4f4976)): ?>
<?php $attributes = $__attributesOriginalece338083788b9a170af7d25fa4f4976; ?>
<?php unset($__attributesOriginalece338083788b9a170af7d25fa4f4976); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalece338083788b9a170af7d25fa4f4976)): ?>
<?php $component = $__componentOriginalece338083788b9a170af7d25fa4f4976; ?>
<?php unset($__componentOriginalece338083788b9a170af7d25fa4f4976); ?>
<?php endif; ?>
<div
class="fi-page-main-sub-navigation-mobile-menu-render-hook-ctn"
>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_MOBILE_MENU_AFTER, scopes: $this->getRenderHookScopes())); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($header = $this->getHeader()): ?>
<?php echo e($header); ?>
<?php else: ?>
<?php
$heading = $this->getHeading();
$headerActions = $this->getCachedHeaderActions();
$headerActionsAlignment = $this->getHeaderActionsAlignment();
$breadcrumbs = filament()->hasBreadcrumbs() ? $this->getBreadcrumbs() : [];
$subheading = $this->getSubheading();
?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($headerActions) || $breadcrumbs || filled($heading) || filled($subheading)): ?>
<?php if (isset($component)) { $__componentOriginal4af1e0a8ab5c0dda93279f6800da3911 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.header.index','data' => ['actions' => $headerActions,'actionsAlignment' => $headerActionsAlignment,'breadcrumbs' => $breadcrumbs,'heading' => $heading,'subheading' => $subheading]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::header'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['actions' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($headerActions),'actions-alignment' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($headerActionsAlignment),'breadcrumbs' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($breadcrumbs),'heading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($heading),'subheading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subheading)]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($heading instanceof \Illuminate\Contracts\Support\Htmlable): ?>
<?php $__env->slot('heading', null, []); ?>
<?php echo e($heading); ?>
<?php $__env->endSlot(); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subheading instanceof \Illuminate\Contracts\Support\Htmlable): ?>
<?php $__env->slot('subheading', null, []); ?>
<?php echo e($subheading); ?>
<?php $__env->endSlot(); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911)): ?>
<?php $attributes = $__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911; ?>
<?php unset($__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal4af1e0a8ab5c0dda93279f6800da3911)): ?>
<?php $component = $__componentOriginal4af1e0a8ab5c0dda93279f6800da3911; ?>
<?php unset($__componentOriginal4af1e0a8ab5c0dda93279f6800da3911); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="fi-page-main">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigation): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigationPosition === SubNavigationPosition::Start): ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_START_BEFORE, scopes: $this->getRenderHookScopes())); ?>
<?php if (isset($component)) { $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.sidebar','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::page.sub-navigation.sidebar'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
<?php $attributes = $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
<?php unset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
<?php $component = $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
<?php unset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
<?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_START_AFTER, scopes: $this->getRenderHookScopes())); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigationPosition === SubNavigationPosition::Top): ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_TOP_BEFORE, scopes: $this->getRenderHookScopes())); ?>
<?php if (isset($component)) { $__componentOriginala59fd7cea3e42dfea7d868b466385a01 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginala59fd7cea3e42dfea7d868b466385a01 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.tabs','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::page.sub-navigation.tabs'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginala59fd7cea3e42dfea7d868b466385a01)): ?>
<?php $attributes = $__attributesOriginala59fd7cea3e42dfea7d868b466385a01; ?>
<?php unset($__attributesOriginala59fd7cea3e42dfea7d868b466385a01); ?>
<?php endif; ?>
<?php if (isset($__componentOriginala59fd7cea3e42dfea7d868b466385a01)): ?>
<?php $component = $__componentOriginala59fd7cea3e42dfea7d868b466385a01; ?>
<?php unset($__componentOriginala59fd7cea3e42dfea7d868b466385a01); ?>
<?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_TOP_AFTER, scopes: $this->getRenderHookScopes())); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="fi-page-content">
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_WIDGETS_BEFORE, scopes: $this->getRenderHookScopes())); ?>
<?php echo e($this->headerWidgets); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_WIDGETS_AFTER, scopes: $this->getRenderHookScopes())); ?>
<?php echo e($slot); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_FOOTER_WIDGETS_BEFORE, scopes: $this->getRenderHookScopes())); ?>
<?php echo e($this->footerWidgets); ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_FOOTER_WIDGETS_AFTER, scopes: $this->getRenderHookScopes())); ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigation && $subNavigationPosition === SubNavigationPosition::End): ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_END_BEFORE, scopes: $this->getRenderHookScopes())); ?>
<?php if (isset($component)) { $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.sidebar','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::page.sub-navigation.sidebar'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
<?php $attributes = $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
<?php unset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
<?php $component = $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
<?php unset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
<?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_END_AFTER, scopes: $this->getRenderHookScopes())); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($footer = $this->getFooter()): ?>
<?php echo e($footer); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! ($this instanceof \Filament\Tables\Contracts\HasTable)): ?>
<?php if (isset($component)) { $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-actions::components.modals','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-actions::modals'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
<?php $attributes = $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
<?php unset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
<?php $component = $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
<?php unset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
<?php endif; ?>
<?php elseif($this->isTableLoaded() && filled($this->defaultTableAction)): ?>
<div
wire:init="mountAction(<?php echo \Illuminate\Support\Js::from($this->defaultTableAction)->toHtml() ?> , <?php if(filled($this->defaultTableActionArguments)): ?> <?php echo \Illuminate\Support\Js::from($this->defaultTableActionArguments)->toHtml() ?> <?php else: ?> {} <?php endif; ?> , <?php echo \Illuminate\Support\Js::from(['table' => true, 'recordKey' => $this->defaultTableActionRecord])->toHtml() ?>)"
></div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($this->defaultAction)): ?>
<div
wire:init="mountAction(<?php echo \Illuminate\Support\Js::from($this->defaultAction)->toHtml() ?> <?php if(filled($this->defaultActionArguments) || filled($this->defaultActionContext)): ?> , <?php if(filled($this->defaultActionArguments)): ?> <?php echo \Illuminate\Support\Js::from($this->defaultActionArguments)->toHtml() ?> <?php else: ?> {} <?php endif; ?> <?php endif; ?> <?php if(filled($this->defaultActionContext)): ?> , <?php echo \Illuminate\Support\Js::from($this->defaultActionContext)->toHtml() ?> <?php endif; ?>)"
></div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_END, scopes: $this->getRenderHookScopes())); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(method_exists($this, 'hasUnsavedDataChangesAlert') && $this->hasUnsavedDataChangesAlert()): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(\Filament\Support\Facades\FilamentView::hasSpaMode()): ?>
<?php
$__scriptKey = '3657389511-0';
ob_start();
?>
<script>
setUpSpaModeUnsavedDataChangesAlert({
body: <?php echo \Illuminate\Support\Js::from(__('filament-panels::unsaved-changes-alert.body'))->toHtml() ?>,
resolveLivewireComponentUsing: () => window.Livewire.find('<?php echo e($_instance->getId()); ?>'),
$wire,
})
</script>
<?php
$__output = ob_get_clean();
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
?>
<?php else: ?>
<?php
$__scriptKey = '3657389511-1';
ob_start();
?>
<script>
setUpUnsavedDataChangesAlert({ $wire })
</script>
<?php
$__output = ob_get_clean();
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! app()->hasDebugModeEnabled()) && $this->hasErrorNotifications()): ?>
<?php
$__scriptKey = '3657389511-2';
ob_start();
?>
<script>
const errorNotifications = <?php echo \Illuminate\Support\Js::from($this->getErrorNotifications())->toHtml() ?>
Livewire.hook('request', ({ payload, fail }) => {
fail(({ status, preventDefault }) => {
if (JSON.parse(payload).components.length === 1) {
for (const component of JSON.parse(payload)
.components) {
if (
JSON.parse(component.snapshot).data
.isFilamentNotificationsComponent
) {
return
}
}
}
preventDefault()
const errorNotification =
errorNotifications[status] ?? errorNotifications['']
new FilamentNotification()
.title(errorNotification.title)
.body(errorNotification.body)
.danger()
.send()
})
})
</script>
<?php
$__output = ob_get_clean();
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if (isset($component)) { $__componentOriginal29f738301ffa464f2646caa32428c50f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal29f738301ffa464f2646caa32428c50f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.unsaved-action-changes-alert','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::unsaved-action-changes-alert'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal29f738301ffa464f2646caa32428c50f)): ?>
<?php $attributes = $__attributesOriginal29f738301ffa464f2646caa32428c50f; ?>
<?php unset($__attributesOriginal29f738301ffa464f2646caa32428c50f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal29f738301ffa464f2646caa32428c50f)): ?>
<?php $component = $__componentOriginal29f738301ffa464f2646caa32428c50f; ?>
<?php unset($__componentOriginal29f738301ffa464f2646caa32428c50f); ?>
<?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/page/index.blade.php ENDPATH**/ ?>
@@ -0,0 +1,217 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'active' => false,
'activeChildItems' => false,
'activeIcon' => null,
'badge' => null,
'badgeColor' => null,
'badgeTooltip' => null,
'childItems' => [],
'first' => false,
'grouped' => false,
'icon' => null,
'last' => false,
'shouldOpenUrlInNewTab' => false,
'sidebarCollapsible' => true,
'subGrouped' => false,
'subNavigation' => false,
'url',
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'active' => false,
'activeChildItems' => false,
'activeIcon' => null,
'badge' => null,
'badgeColor' => null,
'badgeTooltip' => null,
'childItems' => [],
'first' => false,
'grouped' => false,
'icon' => null,
'last' => false,
'shouldOpenUrlInNewTab' => false,
'sidebarCollapsible' => true,
'subGrouped' => false,
'subNavigation' => false,
'url',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
$sidebarCollapsible = $sidebarCollapsible && filament()->isSidebarCollapsibleOnDesktop();
?>
<li
<?php echo e($attributes->class([
'fi-sidebar-item',
'fi-active' => $active,
'fi-sidebar-item-has-active-child-items' => $activeChildItems,
'fi-sidebar-item-has-url' => filled($url),
])); ?>
>
<a
<?php echo e(\Filament\Support\generate_href_html($url, $shouldOpenUrlInNewTab)); ?>
x-on:click="window.matchMedia(`(max-width: 1024px)`).matches && $store.sidebar.close()"
<?php if($sidebarCollapsible && (! $subNavigation)): ?>
x-data="{ tooltip: false }"
x-effect="
tooltip = $store.sidebar.isOpen
? false
: {
content: <?php echo \Illuminate\Support\Js::from($slot->toHtml())->toHtml() ?>,
placement: document.dir === 'rtl' ? 'left' : 'right',
theme: $store.theme,
}
"
x-tooltip.html="tooltip"
<?php endif; ?>
class="fi-sidebar-item-btn"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($icon) && ((! $subGrouped) || ($sidebarCollapsible && (! $subNavigation)))): ?>
<?php echo e(\Filament\Support\generate_icon_html(($active && $activeIcon) ? $activeIcon : $icon, attributes: (new \Illuminate\View\ComponentAttributeBag([
'x-show' => ($subGrouped && $sidebarCollapsible) ? '! $store.sidebar.isOpen' : false,
]))->class(['fi-sidebar-item-icon']), size: \Filament\Support\Enums\IconSize::Large)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((blank($icon) && $grouped) || $subGrouped): ?>
<div
<?php if(filled($icon) && $subGrouped && $sidebarCollapsible && (! $subNavigation)): ?>
x-show="$store.sidebar.isOpen"
<?php endif; ?>
class="fi-sidebar-item-grouped-border"
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $first): ?>
<div
class="fi-sidebar-item-grouped-border-part-not-first"
></div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $last): ?>
<div
class="fi-sidebar-item-grouped-border-part-not-last"
></div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="fi-sidebar-item-grouped-border-part"></div>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<span
<?php if($sidebarCollapsible && (! $subNavigation)): ?>
x-show="$store.sidebar.isOpen"
x-transition:enter="fi-transition-enter"
x-transition:enter-start="fi-transition-enter-start"
x-transition:enter-end="fi-transition-enter-end"
<?php endif; ?>
class="fi-sidebar-item-label"
>
<?php echo e($slot); ?>
</span>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
<span
<?php if($sidebarCollapsible && (! $subNavigation)): ?>
x-show="$store.sidebar.isOpen"
x-transition:enter="fi-transition-enter"
x-transition:enter-start="fi-transition-enter-start"
x-transition:enter-end="fi-transition-enter-end"
<?php endif; ?>
class="fi-sidebar-item-badge-ctn"
>
<?php if (isset($component)) { $__componentOriginal986dce9114ddce94a270ab00ce6c273d = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal986dce9114ddce94a270ab00ce6c273d = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.badge','data' => ['color' => $badgeColor,'tooltip' => $badgeTooltip]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::badge'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeColor),'tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeTooltip)]); ?>
<?php echo e($badge); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal986dce9114ddce94a270ab00ce6c273d)): ?>
<?php $attributes = $__attributesOriginal986dce9114ddce94a270ab00ce6c273d; ?>
<?php unset($__attributesOriginal986dce9114ddce94a270ab00ce6c273d); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal986dce9114ddce94a270ab00ce6c273d)): ?>
<?php $component = $__componentOriginal986dce9114ddce94a270ab00ce6c273d; ?>
<?php unset($__componentOriginal986dce9114ddce94a270ab00ce6c273d); ?>
<?php endif; ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</a>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(($active || $activeChildItems) && $childItems): ?>
<ul class="fi-sidebar-sub-group-items">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $childItems; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $childItem): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$isChildItemChildItemsActive = $childItem->isChildItemsActive();
$isChildActive = (! $isChildItemChildItemsActive) && $childItem->isActive();
$childItemActiveIcon = $childItem->getActiveIcon();
$childItemBadge = $childItem->getBadge();
$childItemBadgeColor = $childItem->getBadgeColor();
$childItemBadgeTooltip = $childItem->getBadgeTooltip();
$childItemIcon = $childItem->getIcon();
$shouldChildItemOpenUrlInNewTab = $childItem->shouldOpenUrlInNewTab();
$childItemUrl = $childItem->getUrl();
?>
<?php if (isset($component)) { $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.sidebar.item','data' => ['active' => $isChildActive,'activeChildItems' => $isChildItemChildItemsActive,'activeIcon' => $childItemActiveIcon,'badge' => $childItemBadge,'badgeColor' => $childItemBadgeColor,'badgeTooltip' => $childItemBadgeTooltip,'first' => $loop->first,'grouped' => true,'icon' => $childItemIcon,'last' => $loop->last,'shouldOpenUrlInNewTab' => $shouldChildItemOpenUrlInNewTab,'subGrouped' => true,'subNavigation' => $subNavigation,'url' => $childItemUrl]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::sidebar.item'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isChildActive),'active-child-items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isChildItemChildItemsActive),'active-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemActiveIcon),'badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemBadgeTooltip),'first' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->first),'grouped' => true,'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemIcon),'last' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->last),'should-open-url-in-new-tab' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldChildItemOpenUrlInNewTab),'sub-grouped' => true,'sub-navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation),'url' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemUrl)]); ?>
<?php echo e($childItem->getLabel()); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
<?php $attributes = $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
<?php unset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
<?php $component = $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
<?php unset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</ul>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</li>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/sidebar/item.blade.php ENDPATH**/ ?>
@@ -0,0 +1,213 @@
<?php $__env->startSection('title', 'Custom Printed Fabrics'); ?>
<?php $__env->startSection('content'); ?>
<!-- HERO SECTION -->
<section class="section" id="fabrics-hero" style="background: linear-gradient(to right, rgba(45, 80, 71, 0.7), rgba(45, 80, 71, 0.5)), url('https://images.unsplash.com/photo-1578926078328-123alce3f3ce?w=1200&q=80') center/cover no-repeat;">
<div class="container">
<div style="padding: 6rem 0; max-width: 700px;">
<h1 style="color: white; font-size: 3rem; margin-bottom: 1rem;">Custom Printed Fabrics</h1>
<p style="color: rgba(255, 255, 255, 0.95); font-size: 1.1rem;">Extend your favorite wallpaper designs to premium fabrics. From upholstery to curtains, cushions to bedding, create a cohesive interior where your designs flow seamlessly across all textiles.</p>
</div>
</div>
</section>
<!-- FABRIC TYPES SECTION -->
<section class="section section--light">
<div class="container">
<h2>Fabric Types & Applications</h2>
<p style="max-width: 700px; margin-bottom: 3rem;">Choose from our range of premium fabrics, each optimized for different applications and uses.</p>
<div class="grid grid--3">
<!-- Upholstery Fabrics -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1555041469-a586c61ea9bc?w=500&q=80" alt="Upholstery Fabrics" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Upholstery Fabrics</div>
<p class="card-description">Durable, premium fabrics perfect for furniture upholstery. Available in various weights and finishes. Ideal for sofas, chairs, and ottomans.</p>
<div style="margin-top: 1rem;">
<button class="btn btn--sm">Explore Collection</button>
</div>
</div>
</div>
<!-- Curtain & Drape Fabrics -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1578926314433-8e18d4f89b16?w=500&q=80" alt="Curtain Fabrics" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Curtain & Drape Fabrics</div>
<p class="card-description">Elegant draping fabrics in various opacities. Perfect for creating custom curtains, drapes, and window treatments that complement your wallpaper.</p>
<div style="margin-top: 1rem;">
<button class="btn btn--sm">Explore Collection</button>
</div>
</div>
</div>
<!-- Decorative Textiles -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1606389506042-4bc31f98b485?w=500&q=80" alt="Decorative Textiles" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Decorative Textiles</div>
<p class="card-description">Versatile fabrics for cushions, pillows, throws, and home accents. Perfect for adding coordinated touches throughout your space.</p>
<div style="margin-top: 1rem;">
<button class="btn btn--sm">Explore Collection</button>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- FEATURED FABRICS GRID -->
<section class="section" id="featured-fabrics">
<div class="container">
<h2>Featured Fabric Collections</h2>
<p style="margin-bottom: 2rem;">Our most popular custom-printed fabric options, available in various widths and finishes.</p>
<div class="grid grid--3">
<!-- Botanical Garden Fabric -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1520763185298-1b434c919eba?w=500&q=80" alt="Botanical Garden" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Botanical Garden</div>
<p class="card-description">Nature-inspired floral patterns printed on premium linen blend. Perfect for upholstery and curtains.</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
<span style="font-weight: 600;">From $45/yard</span>
<button class="btn btn--sm">View</button>
</div>
</div>
</div>
<!-- Geometric Modern -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1577720643272-265f434b3f6f?w=500&q=80" alt="Geometric Modern" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Geometric Modern</div>
<p class="card-description">Contemporary geometric patterns on cotton canvas. Durable and perfect for high-traffic furniture.</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
<span style="font-weight: 600;">From $48/yard</span>
<button class="btn btn--sm">View</button>
</div>
</div>
</div>
<!-- Vintage Elegance -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1578500494198-246f612d03b3?w=500&q=80" alt="Vintage Elegance" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Vintage Elegance</div>
<p class="card-description">Classic ornamental patterns on silk blend fabric. Ideal for luxury upholstery and formal drapery.</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
<span style="font-weight: 600;">From $65/yard</span>
<button class="btn btn--sm">View</button>
</div>
</div>
</div>
<!-- Tropical Vibrancy -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1505142468610-359e7d316be0?w=500&q=80" alt="Tropical Vibrancy" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Tropical Vibrancy</div>
<p class="card-description">Bright tropical foliage patterns on cotton velvet. Perfect for statement cushions and accent furniture.</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
<span style="font-weight: 600;">From $52/yard</span>
<button class="btn btn--sm">View</button>
</div>
</div>
</div>
<!-- Minimalist Serenity -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1511884642898-4c92249e20b6?w=500&q=80" alt="Minimalist Serenity" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Minimalist Serenity</div>
<p class="card-description">Subtle minimalist patterns on natural linen. Versatile for any interior design style.</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
<span style="font-weight: 600;">From $42/yard</span>
<button class="btn btn--sm">View</button>
</div>
</div>
</div>
<!-- Luxe Textured -->
<div class="product-card">
<img src="https://images.unsplash.com/photo-1578926078328-123alce3f3ce?w=500&q=80" alt="Luxe Textured" class="card-image" style="object-fit: cover;">
<div class="card-content">
<div class="card-title">Luxe Textured</div>
<p class="card-description">High-end jacquard weave fabrics with dimensional textures. Perfect for luxury applications.</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
<span style="font-weight: 600;">From $75/yard</span>
<button class="btn btn--sm">View</button>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- CUSTOMIZATION SECTION -->
<section class="section section--light">
<div class="container">
<h2>Fully Customizable</h2>
<div class="two-col">
<div class="two-col-text">
<h3>Create Your Own Custom Fabric</h3>
<p>Love a wallpaper design? We can print it on any of our premium fabric bases. Upload your own design or choose from our wallpaper collections and we'll print it on your fabric of choice.</p>
<ul style="list-style: none; color: var(--text-secondary); margin: var(--spacing-md) 0;">
<li style="margin-bottom: 12px;"><strong> Any Wallpaper Design:</strong> Choose from our full wallpaper catalog</li>
<li style="margin-bottom: 12px;"><strong> Custom Uploads:</strong> Print your own designs or artwork</li>
<li style="margin-bottom: 12px;"><strong> Multiple Base Fabrics:</strong> Select from cotton, linen, silk blends, and more</li>
<li style="margin-bottom: 12px;"><strong> Custom Sizing:</strong> Order exact yardage you need</li>
<li style="margin-bottom: 12px;"><strong> Sample Swatches:</strong> Order fabric samples before committing</li>
</ul>
<button class="btn" style="margin-top: var(--spacing-lg);">Start Custom Design</button>
</div>
<div class="two-col-image">
<img src="https://images.unsplash.com/photo-1578500494198-246f612d03b3?w=500&q=80" alt="Custom Fabrics" style="width: 100%; height: auto; border-radius: 8px; object-fit: cover;">
</div>
</div>
</div>
</section>
<!-- FABRIC SPECIFICATIONS -->
<section class="section">
<div class="container">
<h2>Fabric Specifications & Care</h2>
<div style="background-color: var(--bg-secondary); padding: var(--spacing-lg); border-radius: 20px;">
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-lg);">
<div>
<h4 style="color: var(--accent-dark); margin-bottom: 1rem;">Standard Widths</h4>
<ul style="list-style: none; color: var(--text-secondary);">
<li style="margin-bottom: 8px;"> 54" (Standard upholstery)</li>
<li style="margin-bottom: 8px;"> 60" (Premium upholstery)</li>
<li style="margin-bottom: 8px;"> 45" (Quilting & crafts)</li>
<li style="margin-bottom: 8px;"> 118" (Curtain & drape)</li>
</ul>
</div>
<div>
<h4 style="color: var(--accent-dark); margin-bottom: 1rem;">Care Instructions</h4>
<ul style="list-style: none; color: var(--text-secondary);">
<li style="margin-bottom: 8px;"> Dry clean or gentle hand wash recommended</li>
<li style="margin-bottom: 8px;"> Use cool water with mild detergent</li>
<li style="margin-bottom: 8px;"> Air dry away from direct heat</li>
<li style="margin-bottom: 8px;"> Professional upholstery cleaning safe</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- CTA SECTION -->
<section class="section section--highlight">
<div class="container" style="text-align: center;">
<h2>Ready to Start Your Fabric Project?</h2>
<p style="max-width: 600px; margin: 0 auto var(--spacing-lg); color: var(--text-primary);">
Contact our team to discuss your custom fabric needs. We'll provide samples, pricing, and personalized recommendations.
</p>
<button class="btn btn--secondary">Request Custom Quote</button>
</div>
</section>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/fabrics.blade.php ENDPATH**/ ?>
@@ -0,0 +1,225 @@
<?php
use Filament\Support\Enums\FontWeight;
use Filament\Support\Enums\IconPosition;
use Filament\Support\Enums\IconSize;
use Filament\Support\Enums\Size;
use Filament\Support\View\Components\BadgeComponent;
use Filament\Support\View\Components\LinkComponent;
use Illuminate\View\ComponentAttributeBag;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'badge' => null,
'badgeColor' => 'primary',
'badgeSize' => Size::ExtraSmall,
'color' => 'primary',
'disabled' => false,
'form' => null,
'formId' => null,
'href' => null,
'icon' => null,
'iconAlias' => null,
'iconPosition' => IconPosition::Before,
'iconSize' => null,
'keyBindings' => null,
'labelSrOnly' => false,
'loadingIndicator' => true,
'size' => Size::Medium,
'spaMode' => null,
'tag' => 'a',
'target' => null,
'tooltip' => null,
'type' => 'button',
'weight' => null,
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'badge' => null,
'badgeColor' => 'primary',
'badgeSize' => Size::ExtraSmall,
'color' => 'primary',
'disabled' => false,
'form' => null,
'formId' => null,
'href' => null,
'icon' => null,
'iconAlias' => null,
'iconPosition' => IconPosition::Before,
'iconSize' => null,
'keyBindings' => null,
'labelSrOnly' => false,
'loadingIndicator' => true,
'size' => Size::Medium,
'spaMode' => null,
'tag' => 'a',
'target' => null,
'tooltip' => null,
'type' => 'button',
'weight' => null,
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
if (! $iconPosition instanceof IconPosition) {
$iconPosition = filled($iconPosition) ? (IconPosition::tryFrom($iconPosition) ?? $iconPosition) : null;
}
if (! $badgeSize instanceof Size) {
$badgeSize = filled($badgeSize) ? (Size::tryFrom($badgeSize) ?? $badgeSize) : null;
}
if (! $size instanceof Size) {
$size = filled($size) ? (Size::tryFrom($size) ?? $size) : null;
}
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
}
$iconSize ??= match ($size) {
Size::ExtraSmall, Size::Small => IconSize::Small,
default => null,
};
if (! $weight instanceof FontWeight) {
$weight = filled($weight) ? (FontWeight::tryFrom($weight) ?? $weight) : null;
}
$wireTarget = $loadingIndicator ? $attributes->whereStartsWith(['wire:target', 'wire:click'])->filter(fn ($value): bool => filled($value))->first() : null;
$hasLoadingIndicator = filled($wireTarget) || ($type === 'submit' && filled($form));
if ($hasLoadingIndicator) {
$loadingIndicatorTarget = html_entity_decode($wireTarget ?: $form, ENT_QUOTES);
}
$hasTooltip = filled($tooltip);
?>
<<?php echo e($tag); ?>
<?php if(($tag === 'a') && (! ($disabled && $hasTooltip))): ?>
<?php echo e(\Filament\Support\generate_href_html($href, $target === '_blank', $spaMode)); ?>
<?php endif; ?>
<?php if($keyBindings): ?>
x-bind:id="$id('key-bindings')"
x-mousetrap.global.<?php echo e(collect($keyBindings)->map(fn (string $keyBinding): string => str_replace('+', '-', $keyBinding))->implode('.')); ?>="document.getElementById($el.id)?.click()"
<?php endif; ?>
<?php if($hasTooltip): ?>
x-tooltip="{
content: <?php echo \Illuminate\Support\Js::from($tooltip)->toHtml() ?>,
theme: $store.theme,
allowHTML: <?php echo \Illuminate\Support\Js::from($tooltip instanceof \Illuminate\Contracts\Support\Htmlable)->toHtml() ?>,
}"
<?php endif; ?>
<?php echo e($attributes
->merge([
'aria-disabled' => $disabled ? 'true' : null,
'disabled' => $disabled && blank($tooltip),
'form' => $formId,
'type' => $tag === 'button' ? $type : null,
'wire:loading.attr' => $tag === 'button' ? 'disabled' : null,
'wire:target' => ($hasLoadingIndicator && $loadingIndicatorTarget) ? $loadingIndicatorTarget : null,
], escape: false)
->when(
$disabled && $hasTooltip,
fn (ComponentAttributeBag $attributes) => $attributes->filter(
fn (mixed $value, string $key): bool => ! str($key)->startsWith(['href', 'x-on:', 'wire:click']),
),
)
->class([
'fi-link',
'fi-disabled' => $disabled,
($size instanceof Size) ? "fi-size-{$size->value}" : (is_string($size) ? $size : ''),
($weight instanceof FontWeight) ? "fi-font-{$weight->value}" : (is_string($weight) ? $weight : ''),
])
->color(LinkComponent::class, $color)); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::Before): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
'wire:target' => $loadingIndicatorTarget,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $labelSrOnly): ?>
<?php echo e($slot); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::After): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
'wire:target' => $loadingIndicatorTarget,
])), size: $iconSize)); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
<div class="fi-link-badge-ctn">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($badge instanceof \Illuminate\View\ComponentSlot): ?>
<?php echo e($badge); ?>
<?php else: ?>
<span
<?php echo e((new ComponentAttributeBag)->color(BadgeComponent::class, $badgeColor)->class([
'fi-badge',
($badgeSize instanceof Size) ? "fi-size-{$badgeSize->value}" : (is_string($badgeSize) ? $badgeSize : ''),
])); ?>
>
<?php echo e($badge); ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</<?php echo e($tag); ?>><?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/link.blade.php ENDPATH**/ ?>
@@ -0,0 +1,49 @@
<?php
$columns = $this->getColumns();
$pollingInterval = $this->getPollingInterval();
$heading = $this->getHeading();
$description = $this->getDescription();
$hasHeading = filled($heading);
$hasDescription = filled($description);
?>
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['attributes' =>
(new \Illuminate\View\ComponentAttributeBag)
->merge([
'wire:poll.' . $pollingInterval => $pollingInterval ? true : null,
], escape: false)
->class([
'fi-wi-stats-overview',
])
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-widgets::widget'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
(new \Illuminate\View\ComponentAttributeBag)
->merge([
'wire:poll.' . $pollingInterval => $pollingInterval ? true : null,
], escape: false)
->class([
'fi-wi-stats-overview',
])
)]); ?>
<?php echo e($this->content); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/stats-overview-widget.blade.php ENDPATH**/ ?>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
<div
<?php echo e($attributes->gridColumn($this->getColumnSpan(), $this->getColumnStart())->class(['fi-wi-widget'])); ?>
>
<?php echo e($slot); ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/components/widget.blade.php ENDPATH**/ ?>
@@ -0,0 +1,66 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'user' => filament()->auth()->user(),
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'user' => filament()->auth()->user(),
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<?php
$src = filament()->getUserAvatarUrl($user);
$alt = __('filament-panels::layout.avatar.alt', ['name' => filament()->getUserName($user)]);
?>
<?php if (isset($component)) { $__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.avatar','data' => ['src' => $src,'alt' => $alt,'attributes' =>
\Filament\Support\prepare_inherited_attributes($attributes)
->class(['fi-user-avatar'])
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::avatar'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['src' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($src),'alt' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($alt),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
\Filament\Support\prepare_inherited_attributes($attributes)
->class(['fi-user-avatar'])
)]); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb)): ?>
<?php $attributes = $__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb; ?>
<?php unset($__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb)): ?>
<?php $component = $__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb; ?>
<?php unset($__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/avatar/user.blade.php ENDPATH**/ ?>
@@ -0,0 +1,108 @@
<?php
$user = filament()->auth()->user();
?>
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['class' => 'fi-account-widget']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-widgets::widget'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['class' => 'fi-account-widget']); ?>
<?php if (isset($component)) { $__componentOriginalee08b1367eba38734199cf7829b1d1e9 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalee08b1367eba38734199cf7829b1d1e9 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.section.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::section'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php if (isset($component)) { $__componentOriginalceea4679a368984135244eacf4aafeca = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalceea4679a368984135244eacf4aafeca = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.avatar.user','data' => ['size' => 'lg','user' => $user,'loading' => 'lazy']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-panels::avatar.user'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['size' => 'lg','user' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($user),'loading' => 'lazy']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalceea4679a368984135244eacf4aafeca)): ?>
<?php $attributes = $__attributesOriginalceea4679a368984135244eacf4aafeca; ?>
<?php unset($__attributesOriginalceea4679a368984135244eacf4aafeca); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalceea4679a368984135244eacf4aafeca)): ?>
<?php $component = $__componentOriginalceea4679a368984135244eacf4aafeca; ?>
<?php unset($__componentOriginalceea4679a368984135244eacf4aafeca); ?>
<?php endif; ?>
<div class="fi-account-widget-main">
<h2 class="fi-account-widget-heading">
<?php echo e(__('filament-panels::widgets/account-widget.welcome', ['app' => config('app.name')])); ?>
</h2>
<p class="fi-account-widget-user-name">
<?php echo e(filament()->getUserName($user)); ?>
</p>
</div>
<form
action="<?php echo e(filament()->getLogoutUrl()); ?>"
method="post"
class="fi-account-widget-logout-form"
>
<?php echo csrf_field(); ?>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::ArrowLeftEndOnRectangle,'iconAlias' => \Filament\View\PanelsIconAlias::WIDGETS_ACCOUNT_LOGOUT_BUTTON,'labeledFrom' => 'sm','tag' => 'button','type' => 'submit']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ArrowLeftEndOnRectangle),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::WIDGETS_ACCOUNT_LOGOUT_BUTTON),'labeled-from' => 'sm','tag' => 'button','type' => 'submit']); ?>
<?php echo e(__('filament-panels::widgets/account-widget.actions.logout.label')); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
</form>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
<?php $attributes = $__attributesOriginalee08b1367eba38734199cf7829b1d1e9; ?>
<?php unset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
<?php $component = $__componentOriginalee08b1367eba38734199cf7829b1d1e9; ?>
<?php unset($__componentOriginalee08b1367eba38734199cf7829b1d1e9); ?>
<?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/widgets/account-widget.blade.php ENDPATH**/ ?>
@@ -0,0 +1,80 @@
<?php
$afterHeader = $getChildSchema($schemaComponent::AFTER_HEADER_SCHEMA_KEY)?->toHtmlString();
$isAside = $isAside();
$isCollapsed = $isCollapsed();
$isCollapsible = $isCollapsible();
$isCompact = $isCompact();
$isContained = $isContained();
$isDivided = $isDivided();
$isFormBefore = $isFormBefore();
$description = $getDescription();
$footer = $getChildSchema($schemaComponent::FOOTER_SCHEMA_KEY)?->toHtmlString();
$heading = $getHeading();
$headingTag = $getHeadingTag();
$icon = $getIcon();
$iconColor = $getIconColor();
$iconSize = $getIconSize();
$shouldPersistCollapsed = $shouldPersistCollapsed();
$isSecondary = $isSecondary();
$id = $getId();
?>
<div
<?php echo e($attributes
->merge([
'id' => $id,
], escape: false)
->merge($getExtraAttributes(), escape: false)
->merge($getExtraAlpineAttributes(), escape: false)
->class(['fi-sc-section'])); ?>
>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($label = $getLabel())): ?>
<div class="fi-sc-section-label-ctn">
<?php echo e($getChildSchema($schemaComponent::BEFORE_LABEL_SCHEMA_KEY)); ?>
<div class="fi-sc-section-label">
<?php echo e($label); ?>
</div>
<?php echo e($getChildSchema($schemaComponent::AFTER_LABEL_SCHEMA_KEY)); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($aboveContentContainer = $getChildSchema($schemaComponent::ABOVE_CONTENT_SCHEMA_KEY)?->toHtmlString()): ?>
<?php echo e($aboveContentContainer); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if (isset($component)) { $__componentOriginalee08b1367eba38734199cf7829b1d1e9 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalee08b1367eba38734199cf7829b1d1e9 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.section.index','data' => ['afterHeader' => $afterHeader,'aside' => $isAside,'collapsed' => $isCollapsed,'collapseId' => $id,'collapsible' => $isCollapsible && (! $isAside),'compact' => $isCompact,'contained' => $isContained,'contentBefore' => $isFormBefore,'description' => $description,'divided' => $isDivided,'footer' => $footer,'hasContentEl' => false,'heading' => $heading,'headingTag' => $headingTag,'icon' => $icon,'iconColor' => $iconColor,'iconSize' => $iconSize,'persistCollapsed' => $shouldPersistCollapsed,'secondary' => $isSecondary]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::section'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['after-header' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($afterHeader),'aside' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isAside),'collapsed' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCollapsed),'collapse-id' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($id),'collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCollapsible && (! $isAside)),'compact' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCompact),'contained' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isContained),'content-before' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isFormBefore),'description' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($description),'divided' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isDivided),'footer' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($footer),'has-content-el' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(false),'heading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($heading),'heading-tag' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($headingTag),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($icon),'icon-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconColor),'icon-size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconSize),'persist-collapsed' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldPersistCollapsed),'secondary' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isSecondary)]); ?>
<?php echo e($getChildSchema()->gap(! $isDivided)->extraAttributes(['class' => 'fi-section-content'])); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
<?php $attributes = $__attributesOriginalee08b1367eba38734199cf7829b1d1e9; ?>
<?php unset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
<?php $component = $__componentOriginalee08b1367eba38734199cf7829b1d1e9; ?>
<?php unset($__componentOriginalee08b1367eba38734199cf7829b1d1e9); ?>
<?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($belowContentContainer = $getChildSchema($schemaComponent::BELOW_CONTENT_SCHEMA_KEY)?->toHtmlString()): ?>
<?php echo e($belowContentContainer); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php /**PATH /var/www/additional_design/vendor/filament/schemas/resources/views/components/section.blade.php ENDPATH**/ ?>
@@ -0,0 +1,187 @@
<?php
use Filament\Widgets\View\Components\ChartWidgetComponent;
use Illuminate\View\ComponentAttributeBag;
$color = $this->getColor();
$heading = $this->getHeading();
$description = $this->getDescription();
$filters = $this->getFilters();
$isCollapsible = $this->isCollapsible();
$type = $this->getType();
?>
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['class' => 'fi-wi-chart']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament-widgets::widget'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['class' => 'fi-wi-chart']); ?>
<?php if (isset($component)) { $__componentOriginalee08b1367eba38734199cf7829b1d1e9 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalee08b1367eba38734199cf7829b1d1e9 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.section.index','data' => ['description' => $description,'heading' => $heading,'collapsible' => $isCollapsible]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::section'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['description' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($description),'heading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($heading),'collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCollapsible)]); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($filters || method_exists($this, 'getFiltersSchema')): ?>
<?php $__env->slot('afterHeader', null, []); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($filters): ?>
<?php if (isset($component)) { $__componentOriginal505efd9768415fdb4543e8c564dad437 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal505efd9768415fdb4543e8c564dad437 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.wrapper','data' => ['inlinePrefix' => true,'wire:target' => 'filter','class' => 'fi-wi-chart-filter']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::input.wrapper'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['inline-prefix' => true,'wire:target' => 'filter','class' => 'fi-wi-chart-filter']); ?>
<?php if (isset($component)) { $__componentOriginal97dc683fe4ff7acce9e296503563dd85 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal97dc683fe4ff7acce9e296503563dd85 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.select','data' => ['inlinePrefix' => true,'wire:model.live' => 'filter']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::input.select'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['inline-prefix' => true,'wire:model.live' => 'filter']); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $filters; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $value => $label): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<option value="<?php echo e($value); ?>">
<?php echo e($label); ?>
</option>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal97dc683fe4ff7acce9e296503563dd85)): ?>
<?php $attributes = $__attributesOriginal97dc683fe4ff7acce9e296503563dd85; ?>
<?php unset($__attributesOriginal97dc683fe4ff7acce9e296503563dd85); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal97dc683fe4ff7acce9e296503563dd85)): ?>
<?php $component = $__componentOriginal97dc683fe4ff7acce9e296503563dd85; ?>
<?php unset($__componentOriginal97dc683fe4ff7acce9e296503563dd85); ?>
<?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal505efd9768415fdb4543e8c564dad437)): ?>
<?php $attributes = $__attributesOriginal505efd9768415fdb4543e8c564dad437; ?>
<?php unset($__attributesOriginal505efd9768415fdb4543e8c564dad437); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal505efd9768415fdb4543e8c564dad437)): ?>
<?php $component = $__componentOriginal505efd9768415fdb4543e8c564dad437; ?>
<?php unset($__componentOriginal505efd9768415fdb4543e8c564dad437); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(method_exists($this, 'getFiltersSchema')): ?>
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => 'bottom-end','shift' => true,'width' => 'xs','class' => 'fi-wi-chart-filter']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('filament::dropdown'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['placement' => 'bottom-end','shift' => true,'width' => 'xs','class' => 'fi-wi-chart-filter']); ?>
<?php $__env->slot('trigger', null, []); ?>
<?php echo e($this->getFiltersTriggerAction()); ?>
<?php $__env->endSlot(); ?>
<div class="fi-wi-chart-filter-content">
<?php echo e($this->getFiltersSchema()); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
<?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php $__env->endSlot(); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div
<?php if($pollingInterval = $this->getPollingInterval()): ?>
wire:poll.<?php echo e($pollingInterval); ?>="updateChartData"
<?php endif; ?>
>
<div
x-load
x-load-src="<?php echo e(\Filament\Support\Facades\FilamentAsset::getAlpineComponentSrc('chart', 'filament/widgets')); ?>"
wire:ignore
data-chart-type="<?php echo e($type); ?>"
x-data="chart({
cachedData: <?php echo \Illuminate\Support\Js::from($this->getCachedData())->toHtml() ?>,
options: <?php echo \Illuminate\Support\Js::from($this->getOptions())->toHtml() ?>,
type: <?php echo \Illuminate\Support\Js::from($type)->toHtml() ?>,
})"
<?php echo e((new ComponentAttributeBag)
->color(ChartWidgetComponent::class, $color)
->class([
'fi-wi-chart-canvas-ctn',
'fi-wi-chart-canvas-ctn-no-aspect-ratio' => filled($maxHeight = $this->getMaxHeight()),
])
->style([
'max-height: ' . $maxHeight => filled($maxHeight),
])); ?>
>
<canvas x-ref="canvas"></canvas>
<span
x-ref="backgroundColorElement"
class="fi-wi-chart-bg-color"
></span>
<span
x-ref="borderColorElement"
class="fi-wi-chart-border-color"
></span>
<span
x-ref="gridColorElement"
class="fi-wi-chart-grid-color"
></span>
<span
x-ref="textColorElement"
class="fi-wi-chart-text-color"
></span>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
<?php $attributes = $__attributesOriginalee08b1367eba38734199cf7829b1d1e9; ?>
<?php unset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
<?php $component = $__componentOriginalee08b1367eba38734199cf7829b1d1e9; ?>
<?php unset($__componentOriginalee08b1367eba38734199cf7829b1d1e9); ?>
<?php endif; ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
<?php endif; ?>
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/chart-widget.blade.php ENDPATH**/ ?>
+84
View File
@@ -0,0 +1,84 @@
<?php
namespace Tests\Feature;
use App\Models\Order;
use App\Testing\ShiplogicMockClient;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ShipmentCreationTest extends TestCase
{
use RefreshDatabase;
/**
* Test that shipment can be created with mocked Shiplogic API
*/
public function test_shipment_creation_with_mock_api(): void
{
// Setup mock HTTP responses
ShiplogicMockClient::setup();
// Create a test order with required fields
$order = Order::factory()->create([
'order_number' => 'TEST-001',
'customer_name' => 'John Doe',
'customer_email' => 'john@example.com',
'customer_phone' => '+1234567890',
'delivery_street' => '123 Main Street',
'delivery_unit' => 'Apt 5B',
'delivery_city' => 'New York',
'delivery_zone' => 'NY',
'delivery_code' => '10001',
'delivery_country' => 'US',
'packing_length' => 30,
'packing_width' => 20,
'packing_height' => 10,
'packing_weight' => 2.5,
'status' => 'ready_to_ship',
]);
// Dispatch the ReadyToShipIntent event to trigger shipment creation
// This would normally be triggered by user action in Filament
event(new \App\Events\ReadyToShipIntent($order));
// Verify the order now has shipment metadata
$order->refresh();
$this->assertNotNull($order->courier_shipment_id);
$this->assertNotNull($order->courier_service_level_code);
$this->assertNotNull($order->courier_rate);
// Verify PDFs were stored
$this->assertTrue(\Illuminate\Support\Facades\Storage::exists(
"public/shipments/{$order->uuid}/Shipment Label.pdf"
));
$this->assertTrue(\Illuminate\Support\Facades\Storage::exists(
"public/shipments/{$order->uuid}/Shipment Sticker.pdf"
));
}
/**
* Test that ECO service level is selected when available
*/
public function test_eco_service_level_selection(): void
{
ShiplogicMockClient::setup();
$order = Order::factory()->create([
'order_number' => 'TEST-002',
'customer_name' => 'Jane Smith',
'customer_email' => 'jane@example.com',
'delivery_street' => '456 Oak Ave',
'delivery_city' => 'London',
'delivery_country' => 'GB',
'packing_weight' => 1.5,
'status' => 'ready_to_ship',
]);
event(new \App\Events\ReadyToShipIntent($order));
$order->refresh();
// ECO variant should be selected (FEDEX_INTERNATIONAL_ECONOMY)
$this->assertStringContainsString('ECONOMY', $order->courier_service_level_code);
}
}