AI Review Center
Commit Review Workspace ?
Select a commit on the left to inspect quality, security, business value, findings, and suggested code changes.
Project AI Score
?
68%
Quality Avg
?
74%
Security Avg
?
54%
Reviews
?
7
Review Result ?
jattin01/antfast-dashboard · 52ce38b5
This commit initializes a Laravel project with configuration files, environment examples, and GitHub workflows for CI. It provides a solid base for development and CI automation but lacks initial application code and secure environment keys.
Quality
?
85%
Security
?
60%
Business Value
?
70%
Maintainability
?
88%
Issues & Suggested Fixes
?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
App Key Is Empty
Where
.env.example:3
Issue / Evidence
APP_KEY is empty
Suggested Fix
generate a strong key for better security and initial setup completeness
App Debug Set To True
Where
.env.example:4
Issue / Evidence
APP_DEBUG set to true
Suggested Fix
consider setting to false or documenting this should be false in production for security
Database Credentials Commented Out
Where
.env.example:23-.env.example:28
Issue / Evidence
database credentials commented out
Suggested Fix
provide secure defaults or instructions to reduce setup errors
Ci Is Set Up But Enabling Coverage Reporti...
Where
.github/workflows/tests.yml:22-.github/workflows/tests.yml:47
Issue / Evidence
CI is set up but enabling coverage reporting could improve code quality tracking
Suggested Fix
enable test coverage
No Descriptive Detail
Where
commit message
Issue / Evidence
no descriptive detail
Suggested Fix
improve commit messages by adding detail about purpose and impact to enhance project documentation
Code Change Preview · .editorconfig
?
Removed / Before Commit
Added / After Commit
+ root = true + + [*] + charset = utf-8 + end_of_line = lf + indent_size = 4 + indent_style = space + insert_final_newline = true + trim_trailing_whitespace = true + + [*.md] + trim_trailing_whitespace = false + + [*.{yml,yaml}] + indent_size = 2 + + [compose.yaml] + indent_size = 4
Removed / Before Commit
Added / After Commit
+ APP_NAME="ANTFAST Admin" + APP_ENV=local + APP_KEY= + APP_DEBUG=true + APP_URL=http://localhost + + APP_LOCALE=en + APP_FALLBACK_LOCALE=en + APP_FAKER_LOCALE=en_US + + APP_MAINTENANCE_DRIVER=file + # APP_MAINTENANCE_STORE=database + + # PHP_CLI_SERVER_WORKERS=4 + + BCRYPT_ROUNDS=12 + + LOG_CHANNEL=stack
Removed / Before Commit
Added / After Commit
+ * text=auto eol=lf + + *.blade.php diff=html + *.css diff=css + *.html diff=html + *.md diff=markdown + *.php diff=php + + /.github export-ignore + CHANGELOG.md export-ignore + .styleci.yml export-ignore
Removed / Before Commit
Added / After Commit
+ name: Issues + + on: + issues: + types: [labeled] + + permissions: + issues: write + + jobs: + help-wanted: + uses: laravel/.github/.github/workflows/issues.yml@main
Removed / Before Commit
Added / After Commit
+ name: Pull Requests + + on: + pull_request_target: + types: [opened] + + permissions: + pull-requests: write + + jobs: + uneditable: + uses: laravel/.github/.github/workflows/pull-requests.yml@main
Removed / Before Commit
Added / After Commit
+ name: Tests + + on: + push: + branches: + - master + - '*.x' + pull_request: + schedule: + - cron: '0 0 * * *' + + permissions: + contents: read + + jobs: + tests: + runs-on: ubuntu-latest +
Removed / Before Commit
Added / After Commit
+ name: Update Changelog + + on: + release: + types: [released] + + permissions: {} + + jobs: + update: + permissions: + contents: write + uses: laravel/.github/.github/workflows/update-changelog.yml@main
Removed / Before Commit
Added / After Commit
+ *.log + .DS_Store + .env + .env.backup + .env.production + .phpactor.json + .phpunit.result.cache + /.fleet + /.idea + /.nova + /.phpunit.cache + /.vscode + /.zed + /auth.json + /node_modules + /public/build + /public/hot + /public/storage
Removed / Before Commit
Added / After Commit
+ php: + preset: laravel + disabled: + - no_unused_imports + finder: + not-name: + - index.php + js: true + css: true
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class B2bPortalController extends Controller + { + public function index() + { + return view('pages.b2b', DemoData::b2bPortal()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class CompanyController extends Controller + { + public function index() + { + return view('pages.companies', DemoData::companies()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + abstract class Controller + { + // + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class CustomerController extends Controller + { + public function index() + { + return view('pages.customers', DemoData::customers()); + } + + public function show(string $slug) + { + $profile = DemoData::customerProfile($slug); + + abort_if(! $profile, 404);
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class DashboardController extends Controller + { + public function index() + { + return view('pages.dashboard', [ + 'kpis' => DemoData::dashboardKpis(), + 'ordersRevenueChart' => DemoData::ordersRevenueChart(), + 'dailyOrdersChart' => DemoData::dailyOrdersChart(), + 'companyOrdersChart' => DemoData::companyOrdersChart(), + 'productSalesChart' => DemoData::productSalesChart(), + 'plantUtilizationChart' => DemoData::plantUtilizationChart(), + 'completionChart' => DemoData::completionChart(),
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class DeliveryController extends Controller + { + public function index() + { + return view('pages.deliveries', DemoData::deliveries()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class DispatchController extends Controller + { + public function index() + { + return view('pages.dispatch', DemoData::dispatch()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class DriverController extends Controller + { + public function index() + { + return view('pages.drivers', DemoData::drivers()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class FinanceController extends Controller + { + public function index() + { + return view('pages.finance', DemoData::finance()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class InvoiceController extends Controller + { + public function index() + { + return view('pages.invoices', DemoData::invoices()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class NotificationController extends Controller + { + public function index() + { + return view('pages.notifications', DemoData::notifications()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class OrderController extends Controller + { + public function index() + { + return view('pages.orders', DemoData::orders()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class PaymentController extends Controller + { + public function index() + { + return view('pages.payments', DemoData::payments()); + } + }
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class PlantController extends Controller + { + public function index() + { + return view('pages.plants', DemoData::plants()); + } + + public function dashboard() + { + return view('pages.plants-dashboard', DemoData::plants()); + } +
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class PricingController extends Controller + { + public function index() + { + return view('pages.pricing', DemoData::pricing()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class ProductController extends Controller + { + public function index() + { + return view('pages.products', DemoData::products()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class ProjectController extends Controller + { + public function index() + { + return view('pages.projects', DemoData::projects()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class QcController extends Controller + { + public function index() + { + return view('pages.qc', DemoData::qc()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class ReportController extends Controller + { + public function index() + { + return view('pages.reports', [ + ...DemoData::reports(), + 'chart' => DemoData::reportsChart(), + ]); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class RoleController extends Controller + { + public function index() + { + return view('pages.roles', DemoData::roles()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class SettingController extends Controller + { + public function index() + { + return view('pages.settings', DemoData::settings()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class TruckController extends Controller + { + public function index() + { + return view('pages.trucks', DemoData::trucks()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class UserController extends Controller + { + public function index() + { + return view('pages.users', DemoData::users()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class VerificationController extends Controller + { + public function index() + { + return view('pages.verification', DemoData::verification()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Support\Demo\DemoData; + + class WalletController extends Controller + { + public function index() + { + return view('pages.wallet', DemoData::wallet()); + } + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Models; + + // use Illuminate\Contracts\Auth\MustVerifyEmail; + use Database\Factories\UserFactory; + use Illuminate\Database\Eloquent\Factories\HasFactory; + use Illuminate\Foundation\Auth\User as Authenticatable; + use Illuminate\Notifications\Notifiable; + + class User extends Authenticatable + { + /** @use HasFactory<UserFactory> */ + use HasFactory, Notifiable; + + /** + * The attributes that are mass assignable. + *
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Providers; + + use Illuminate\Support\ServiceProvider; + + class AppServiceProvider extends ServiceProvider + { + /** + * Register any application services. + */ + public function register(): void + { + // + } + + /** + * Bootstrap any application services.
Removed / Before Commit
Added / After Commit
+ #!/usr/bin/env php + <?php + + use Illuminate\Foundation\Application; + use Symfony\Component\Console\Input\ArgvInput; + + define('LARAVEL_START', microtime(true)); + + // Register the Composer autoloader... + require __DIR__.'/vendor/autoload.php'; + + // Bootstrap Laravel and handle the command... + /** @var Application $app */ + $app = require_once __DIR__.'/bootstrap/app.php'; + + $status = $app->handleCommand(new ArgvInput); + + exit($status);
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Foundation\Application; + use Illuminate\Foundation\Configuration\Exceptions; + use Illuminate\Foundation\Configuration\Middleware; + + return Application::configure(basePath: dirname(__DIR__)) + ->withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // + }) + ->withExceptions(function (Exceptions $exceptions): void { + // + })->create();
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ <?php + + use App\Providers\AppServiceProvider; + + return [ + AppServiceProvider::class, + ];
Removed / Before Commit
Added / After Commit
+ # Release Notes + + ## [Unreleased](https://github.com/laravel/laravel/compare/v12.12.1...12.x) + + ## [v12.12.1](https://github.com/laravel/laravel/compare/v12.12.0...v12.12.1) - 2026-03-10 + + * [12.x] Makes imports consistent by [@nunomaduro](https://github.com/nunomaduro) in https://github.com/laravel/laravel/pull/6760 + + ## [v12.12.0](https://github.com/laravel/laravel/compare/v12.11.2...v12.12.0) - 2026-03-09 + + * Update phpunit version to ^11.5.50 to address CVE by [@PerryvanderMeer](https://github.com/PerryvanderMeer) in https://github.com/laravel/laravel/pull/6746 + * [12.x] Add `APP_NAME` fallback in mail config by [@apoorvdarshan](https://github.com/apoorvdarshan) in https://github.com/laravel/laravel/pull/6755 + * [12.x] Neutralize DB_URL in default phpunit.xml by [@Husseinadq](https://github.com/Husseinadq) in https://github.com/laravel/laravel/pull/6761 + + ## [v12.11.2](https://github.com/laravel/laravel/compare/v12.11.1...v12.11.2) - 2026-01-19 + + * [12.x] Update composer dev script to ensure no timeout by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/laravel/pull/6735 + * [12.x] Update jobs/cache migrations by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/laravel/pull/6736
Removed / Before Commit
Added / After Commit
+ { + "$schema": "https://getcomposer.org/schema.json", + "name": "antfast/admin-dashboard", + "type": "project", + "description": "ANTFAST Concrete admin dashboard built on Laravel.", + "keywords": [ + "laravel", + "admin", + "dashboard", + "antfast" + ], + "license": "MIT", + "require": { + "php": "^8.2", + "laravel/framework": "^12.0", + "laravel/tinker": "^2.10.1", + "mallardduck/blade-lucide-icons": "^1.26" + },
Removed / Before Commit
Added / After Commit
+ <?php + + return [ + + /* + |-------------------------------------------------------------------------- + | Application Name + |-------------------------------------------------------------------------- + | + | This value is the name of your application, which will be used when the + | framework needs to place the application's name in a notification or + | other UI elements where an application name needs to be displayed. + | + */ + + 'name' => env('APP_NAME', 'Laravel'), + + /*
Removed / Before Commit
Added / After Commit
+ <?php + + use App\Models\User; + + return [ + + /* + |-------------------------------------------------------------------------- + | Authentication Defaults + |-------------------------------------------------------------------------- + | + | This option defines the default authentication "guard" and password + | reset "broker" for your application. You may change these values + | as required, but they're a perfect start for most applications. + | + */ + + 'defaults' => [
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Support\Str; + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Cache Store + |-------------------------------------------------------------------------- + | + | This option controls the default cache store that will be used by the + | framework. This connection is utilized if another isn't explicitly + | specified when running a cache operation inside the application. + | + */ + + 'default' => env('CACHE_STORE', 'database'),
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Support\Str; + use Pdo\Mysql; + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for database operations. This is + | the connection which will be utilized unless another connection + | is explicitly specified when you execute a query / statement. + | + */
Removed / Before Commit
Added / After Commit
+ <?php + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Filesystem Disk + |-------------------------------------------------------------------------- + | + | Here you may specify the default filesystem disk that should be used + | by the framework. The "local" disk, as well as a variety of cloud + | based disks are available to your application for file storage. + | + */ + + 'default' => env('FILESYSTEM_DISK', 'local'), + + /*
Removed / Before Commit
Added / After Commit
+ <?php + + use Monolog\Handler\NullHandler; + use Monolog\Handler\StreamHandler; + use Monolog\Handler\SyslogUdpHandler; + use Monolog\Processor\PsrLogMessageProcessor; + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Log Channel + |-------------------------------------------------------------------------- + | + | This option defines the default log channel that is utilized to write + | messages to your logs. The value provided here should match one of + | the channels present in the list of "channels" configured below. + |
Removed / Before Commit
Added / After Commit
+ <?php + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Mailer + |-------------------------------------------------------------------------- + | + | This option controls the default mailer that is used to send all email + | messages unless another mailer is explicitly specified when sending + | the message. All additional mailers can be configured within the + | "mailers" array. Examples of each type of mailer are provided. + | + */ + + 'default' => env('MAIL_MAILER', 'log'), +
Removed / Before Commit
Added / After Commit
+ <?php + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Queue Connection Name + |-------------------------------------------------------------------------- + | + | Laravel's queue supports a variety of backends via a single, unified + | API, giving you convenient access to each backend using identical + | syntax for each. The default queue connection is defined below. + | + */ + + 'default' => env('QUEUE_CONNECTION', 'database'), + + /*
Removed / Before Commit
Added / After Commit
+ <?php + + return [ + + /* + |-------------------------------------------------------------------------- + | Third Party Services + |-------------------------------------------------------------------------- + | + | This file is for storing the credentials for third party services such + | as Mailgun, Postmark, AWS and more. This file provides the de facto + | location for this type of information, allowing packages to have + | a conventional file to locate the various service credentials. + | + */ + + 'postmark' => [ + 'key' => env('POSTMARK_API_KEY'),
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Support\Str; + + return [ + + /* + |-------------------------------------------------------------------------- + | Default Session Driver + |-------------------------------------------------------------------------- + | + | This option determines the default session driver that is utilized for + | incoming requests. Laravel supports a variety of storage options to + | persist session data. Database storage is a great default choice. + | + | Supported: "file", "cookie", "database", "memcached", + | "redis", "dynamodb", "array" + |
Removed / Before Commit
Added / After Commit
+ *.sqlite*
Removed / Before Commit
Added / After Commit
+ <?php + + namespace Database\Factories; + + use App\Models\User; + use Illuminate\Database\Eloquent\Factories\Factory; + use Illuminate\Support\Facades\Hash; + use Illuminate\Support\Str; + + /** + * @extends Factory<User> + */ + class UserFactory extends Factory + { + /** + * The current password being used by the factory. + */ + protected static ?string $password;
Removed / Before Commit
Added / After Commit
+ <?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::create('users', function (Blueprint $table) { + $table->id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable();
Removed / Before Commit
Added / After Commit
+ <?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::create('cache', function (Blueprint $table) { + $table->string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration')->index(); + });
Removed / Before Commit
Added / After Commit
+ <?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::create('jobs', function (Blueprint $table) { + $table->id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts');
Removed / Before Commit
Added / After Commit
+ <?php + + namespace Database\Seeders; + + use App\Models\User; + use Illuminate\Database\Console\Seeds\WithoutModelEvents; + use Illuminate\Database\Seeder; + + class DatabaseSeeder extends Seeder + { + use WithoutModelEvents; + + /** + * Seed the application's database. + */ + public function run(): void + { + // User::factory(10)->create();
Removed / Before Commit
Added / After Commit
+ { + "name": "antfast-admin", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "chart.js": "^4.5.1" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "axios": "^1.11.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "tailwindcss": "^4.0.0", + "vite": "^7.0.7" + } + },
Removed / Before Commit
Added / After Commit
+ { + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "axios": "^1.11.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "tailwindcss": "^4.0.0", + "vite": "^7.0.7" + }, + "dependencies": { + "chart.js": "^4.5.1"
Removed / Before Commit
Added / After Commit
+ <?xml version="1.0" encoding="UTF-8"?> + <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" + bootstrap="vendor/autoload.php" + colors="true" + > + <testsuites> + <testsuite name="Unit"> + <directory>tests/Unit</directory> + </testsuite> + <testsuite name="Feature"> + <directory>tests/Feature</directory> + </testsuite> + </testsuites> + <source> + <include> + <directory>app</directory> + </include>
Removed / Before Commit
Added / After Commit
+ <IfModule mod_rewrite.c> + <IfModule mod_negotiation.c> + Options -MultiViews -Indexes + </IfModule> + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Foundation\Application; + use Illuminate\Http\Request; + + define('LARAVEL_START', microtime(true)); + + // Determine if the application is in maintenance mode... + if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) { + require $maintenance; + } + + // Register the Composer autoloader... + require __DIR__.'/../vendor/autoload.php'; + + // Bootstrap Laravel and handle the request... + /** @var Application $app */ + $app = require_once __DIR__.'/../bootstrap/app.php';
Removed / Before Commit
Added / After Commit
+ User-agent: * + Disallow:
Removed / Before Commit
Added / After Commit
+ # ANTFAST Admin Dashboard + + Laravel wrapper for the ANTFAST Concrete admin dashboard. + + ## Requirements + + - PHP 8.2+ + - Composer + + ## Run Locally + + ```bash + php artisan serve + ``` + + Open the URL printed by Artisan, usually `http://127.0.0.1:8000`. + + The converted dashboard view lives at `resources/views/dashboard.blade.php`, and the `/` route is defined in `routes/web.php`.
Removed / Before Commit
Added / After Commit
+ @import 'tailwindcss'; + + @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; + @source '../../storage/framework/views/*.php'; + @source '../**/*.blade.php'; + @source '../**/*.js'; + + @theme { + --font-sans: 'Plus Jakarta Sans', 'Instrument Sans', ui-sans-serif, system-ui, sans-serif; + --font-display: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif; + + /* Brand — violet/indigo */ + --color-brand-50: #f4f2ff; + --color-brand-100: #e9e4ff; + --color-brand-200: #d2c8ff; + --color-brand-300: #b3a0ff; + --color-brand-400: #9277ff; + --color-brand-500: #7464ff;
Removed / Before Commit
Added / After Commit
+ import './bootstrap'; + import Chart from 'chart.js/auto'; + + Chart.defaults.font.family = "'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif"; + Chart.defaults.color = '#79728f'; + Chart.defaults.plugins.tooltip.backgroundColor = '#1a1726'; + Chart.defaults.plugins.tooltip.padding = 10; + Chart.defaults.plugins.tooltip.cornerRadius = 10; + Chart.defaults.plugins.tooltip.titleFont = { weight: '700' }; + + function initCharts() { + document.querySelectorAll('canvas[data-chart]').forEach((canvas) => { + if (canvas.dataset.chartInit) return; + try { + const config = JSON.parse(canvas.dataset.chart); + new Chart(canvas, config); + canvas.dataset.chartInit = '1'; + } catch (e) {
Removed / Before Commit
Added / After Commit
+ import axios from 'axios'; + window.axios = axios; + + window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ @props(['title' => 'Dashboard']) + + <!doctype html> + <html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>{{ $title }} - ANTFAST Operations</title> + <link rel="preconnect" href="https://fonts.bunny.net"> + <link href="https://fonts.bunny.net/css?family=plus-jakarta-sans:400,500,600,700,800" rel="stylesheet" /> + @vite(['resources/css/app.css', 'resources/js/app.js']) + </head> + <body class="text-ink-900 antialiased"> + <div class="aurora-bg"></div> + + <div class="mx-auto flex min-h-screen w-full max-w-[1700px] gap-0 p-3 sm:p-4 lg:gap-4 lg:p-5"> + <x-layout.sidebar /> +
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ @php($items = \App\Support\Demo\DemoData::navItems()) + + <div data-command-palette class="fixed inset-0 z-50 hidden items-start justify-center bg-navy-900/60 px-4 pt-[12vh] backdrop-blur-sm"> + <div class="w-full max-w-lg overflow-hidden rounded-3xl border border-white/10 bg-white shadow-lift animate-pop"> + <div class="flex items-center gap-3 border-b border-ink-100 px-4 py-3.5"> + <x-lucide-command class="h-5 w-5 text-brand-500" /> + <input data-command-input type="text" placeholder="Jump to a module..." class="flex-1 border-0 bg-transparent text-sm font-medium text-ink-900 outline-none placeholder:text-ink-400"> + <span class="rounded-md bg-ink-100 px-1.5 py-0.5 text-[10px] font-bold text-ink-500">ESC</span> + </div> + <div class="max-h-80 overflow-y-auto p-2 scrollbar-thin"> + @foreach ($items as $item) + <a data-command-item data-command-label="{{ $item['label'] }}" href="{{ route($item['route']) }}" class="flex items-center gap-3 rounded-xl px-3 py-2.5 text-sm font-semibold text-ink-700 transition hover:bg-brand-50 hover:text-brand-700"> + <span class="grid h-9 w-9 place-items-center rounded-xl bg-ink-50 text-ink-500"> + <x-dynamic-component :component="'lucide-' . $item['icon']" class="h-4 w-4" /> + </span> + {{ $item['label'] }} + <x-lucide-corner-down-left class="ml-auto h-3.5 w-3.5 text-ink-300" /> + </a>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ @php($items = \App\Support\Demo\DemoData::navItems()) + + <aside class="fixed inset-x-3 bottom-3 z-30 flex h-[76px] items-center gap-1 overflow-x-auto rounded-[1.75rem] bg-gradient-to-b from-navy-600 via-navy-700 to-navy-800 px-2 shadow-rail scrollbar-none lg:sticky lg:top-5 lg:h-[calc(100vh-2.5rem)] lg:w-[100px] lg:flex-col lg:items-center lg:gap-3 lg:overflow-visible lg:rounded-[2rem] lg:px-0 lg:py-5"> + + <div class="pointer-events-none absolute -right-16 -top-16 hidden h-44 w-44 rounded-full bg-brand-500/35 blur-3xl lg:block"></div> + <div class="pointer-events-none absolute -bottom-20 -left-12 hidden h-44 w-44 rounded-full bg-aqua-400/20 blur-3xl lg:block"></div> + + <a href="{{ route('dashboard') }}" class="relative z-10 hidden shrink-0 lg:grid lg:h-14 lg:w-14 lg:place-items-center lg:rounded-2xl lg:bg-gradient-to-br lg:from-white lg:via-brand-100 lg:to-brand-400 lg:font-display lg:text-lg lg:font-extrabold lg:text-navy-800 lg:shadow-lift"> + Af + </a> + + <nav class="relative z-10 flex flex-1 items-center gap-1.5 scrollbar-none lg:mt-2 lg:w-full lg:flex-col lg:gap-2 lg:overflow-y-auto lg:px-2.5 lg:py-1"> + @foreach ($items as $item) + @php($hasSubmenu = !empty($item['submenu'])) + @php($active = $hasSubmenu + ? (request()->routeIs($item['route']) || collect($item['submenu'])->contains(fn($s) => request()->routeIs($s['route']))) + : request()->routeIs($item['route'])) +
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ @php($notifications = \App\Support\Demo\DemoData::notifications()['items']) + + <header class="flex flex-wrap items-center justify-between gap-3"> + <div class="flex items-center gap-3"> + <div class="grid h-11 w-11 place-items-center rounded-2xl bg-gradient-to-br from-navy-700 to-navy-500 text-white shadow-soft"> + <x-lucide-factory class="h-5 w-5" /> + </div> + <div> + <p class="font-display text-xl font-extrabold leading-none text-ink-900"> + ant<span class="gradient-text">fast</span> + </p> + <p class="mt-1 text-[11px] font-semibold uppercase tracking-wider text-ink-500">Profitability - Productivity - Perfection</p> + </div> + </div> + + <div class="flex flex-1 items-center justify-end gap-2.5 sm:gap-3"> + <button data-command-open type="button" class="glass flex h-11 w-full max-w-[200px] items-center gap-2.5 rounded-full px-4 text-sm text-ink-500 shadow-soft transition hover:border-brand-200 sm:max-w-xs lg:max-w-sm"> + <x-lucide-search class="h-4 w-4" />
Removed / Before Commit
Added / After Commit
+ @props(['name', 'initials' => null]) + + @php + $initials = $initials ?? collect(explode(' ', $name))->map(fn ($p) => mb_substr($p, 0, 1))->take(2)->implode(''); + $palettes = [ + 'from-brand-500 to-brand-300', 'from-aqua-500 to-aqua-300', + 'from-amber-500 to-amber-300', 'from-navy-700 to-brand-500', + ]; + $palette = $palettes[crc32($name) % count($palettes)]; + @endphp + + <span {{ $attributes->merge(['class' => "grid h-9 w-9 shrink-0 place-items-center rounded-full bg-gradient-to-br $palette text-[11px] font-extrabold text-white shadow-soft"]) }}> + {{ $initials }} + </span>
Removed / Before Commit
Added / After Commit
+ @props(['variant' => 'ghost', 'icon' => null, 'href' => null]) + + @php + $base = 'inline-flex h-11 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-full px-5 text-[13px] font-bold transition active:scale-[0.97]'; + $styles = [ + 'primary' => 'shimmer-btn bg-gradient-to-r from-brand-500 to-brand-400 text-white shadow-glow hover:-translate-y-0.5', + 'dark' => 'bg-navy-700 text-white shadow-soft hover:-translate-y-0.5', + 'ghost' => 'border border-ink-200 bg-white text-ink-700 shadow-soft hover:-translate-y-0.5 hover:border-brand-200', + ][$variant] ?? ''; + $tag = $href ? 'a' : 'button'; + @endphp + + <{{ $tag }} @if($href) href="{{ $href }}" @endif {{ $attributes->merge(['class' => "$base $styles"]) }}> + @if ($icon) + <x-dynamic-component :component="'lucide-' . $icon" class="h-4 w-4" /> + @endif + {{ $slot }} + </{{ $tag }}>
Removed / Before Commit
Added / After Commit
+ @props(['days', 'month' => null]) + + <div {{ $attributes->merge(['class' => 'grid grid-cols-7 gap-2']) }}> + @foreach (['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] as $label) + <div class="py-1 text-center text-[10.5px] font-extrabold uppercase text-ink-400">{{ $label }}</div> + @endforeach + + @foreach ($days as $d) + @php + $state = $d['state']; + $cls = match ($state) { + 'active' => 'bg-gradient-to-br from-brand-500 to-brand-400 text-white shadow-glow', + 'busy' => 'bg-brand-50 text-brand-700', + default => 'bg-ink-50 text-ink-600', + }; + @endphp + <div class="flex min-h-[54px] flex-col items-center justify-center gap-0.5 rounded-2xl text-sm font-extrabold {{ $cls }}"> + {{ $d['day'] }}
Removed / Before Commit
Added / After Commit
+ @props(['config', 'height' => '280px']) + + <div {{ $attributes->merge(['class' => 'relative w-full']) }} style="height: {{ $height }}"> + <canvas data-chart="{{ json_encode($config) }}"></canvas> + </div>
Removed / Before Commit
Added / After Commit
+ @props(['icon' => 'inbox', 'message' => 'Nothing here yet']) + + <div {{ $attributes->merge(['class' => 'flex flex-col items-center justify-center gap-2 rounded-2xl border border-dashed border-ink-200 bg-ink-50/60 py-10 text-center']) }}> + <span class="grid h-11 w-11 place-items-center rounded-2xl bg-white text-ink-400 shadow-soft"> + <x-dynamic-component :component="'lucide-' . $icon" class="h-5 w-5" /> + </span> + <p class="text-sm font-bold text-ink-500">{{ $message }}</p> + </div>
Removed / Before Commit
Added / After Commit
+ @props(['title', 'subtitle' => null, 'status' => null]) + + <div {{ $attributes->merge(['class' => 'card-hover reveal flex flex-col gap-3 rounded-3xl border border-ink-100 bg-white p-4 shadow-soft']) }}> + <div class="flex items-start justify-between gap-3"> + <div class="min-w-0"> + <h3 class="truncate font-display text-[15px] font-extrabold text-ink-900">{{ $title }}</h3> + @if ($subtitle) + <p class="mt-0.5 truncate text-xs font-semibold text-ink-500">{{ $subtitle }}</p> + @endif + </div> + @if ($status) + <x-ui.status-badge :label="$status" /> + @endif + </div> + + {{ $slot }} + </div>
Removed / Before Commit
Added / After Commit
+ @props(['label', 'value']) + + <div {{ $attributes->merge(['class' => 'flex min-h-[52px] items-center justify-between gap-3 rounded-2xl border border-ink-100 bg-ink-50/60 px-4 py-2.5']) }}> + <span class="text-xs font-bold text-ink-500">{{ $label }}</span> + <strong class="text-right text-[13px] font-extrabold text-ink-900">{{ $value }}</strong> + </div>
Removed / Before Commit
Added / After Commit
+ @props(['icon', 'title', 'desc' => null]) + + <div {{ $attributes->merge(['class' => 'flex items-center gap-3 rounded-2xl border border-ink-100 bg-white p-3 transition hover:-translate-y-0.5 hover:border-brand-200 hover:shadow-soft']) }}> + <span class="grid h-10 w-10 shrink-0 place-items-center rounded-xl bg-brand-50 text-brand-600"> + <x-dynamic-component :component="'lucide-' . $icon" class="h-4 w-4" /> + </span> + <div class="min-w-0 flex-1"> + <strong class="block text-[13px] font-bold text-ink-900">{{ $title }}</strong> + @if ($desc) + <p class="mt-0.5 truncate text-xs font-medium text-ink-500">{{ $desc }}</p> + @endif + </div> + @isset($trailing) + <div class="shrink-0">{{ $trailing }}</div> + @endisset + </div>
Removed / Before Commit
Added / After Commit
+ @props(['eyebrow' => null, 'title', 'subtitle' => null]) + + <div class="reveal mb-6 flex flex-wrap items-end justify-between gap-4"> + <div> + @if ($eyebrow) + <p class="mb-1.5 flex items-center gap-1.5 text-xs font-bold uppercase tracking-wider text-brand-500"> + <x-lucide-sparkle class="h-3.5 w-3.5" /> {{ $eyebrow }} + </p> + @endif + <h1 class="font-display text-[28px] font-extrabold leading-tight text-ink-900 sm:text-[32px]">{{ $title }}</h1> + @if ($subtitle) + <p class="mt-1.5 max-w-2xl text-sm font-medium text-ink-500">{{ $subtitle }}</p> + @endif + </div> + + @isset($actions) + <div class="flex flex-wrap items-center gap-2.5"> + {{ $actions }}
Removed / Before Commit
Added / After Commit
+ @props(['title' => null, 'subtitle' => null, 'dark' => false, 'tilt' => false]) + + @php + $base = $dark + ? 'noise relative overflow-hidden rounded-3xl border border-white/10 bg-gradient-to-br from-navy-700 via-navy-600 to-brand-800 text-white shadow-lift' + : 'relative overflow-hidden rounded-3xl border border-ink-100 bg-white shadow-soft'; + @endphp + + <div {{ $attributes->merge(['class' => "$base reveal p-5"]) }} @if($tilt) data-tilt @endif> + @if ($title) + <div class="mb-4 flex flex-wrap items-start justify-between gap-3"> + <div> + <h2 class="font-display text-[16px] font-extrabold leading-tight {{ $dark ? 'text-white' : 'text-ink-900' }}">{{ $title }}</h2> + @if ($subtitle) + <p class="mt-1 text-xs font-semibold {{ $dark ? 'text-white/60' : 'text-ink-500' }}">{{ $subtitle }}</p> + @endif + </div> + @isset($actions)
Removed / Before Commit
Added / After Commit
+ @props(['value' => 0]) + + <div {{ $attributes->merge(['class' => 'h-2 w-full overflow-hidden rounded-full bg-ink-100']) }}> + <span class="block h-full rounded-full bg-gradient-to-r from-brand-500 via-brand-400 to-aqua-400 transition-all duration-700" style="width: {{ $value }}%"></span> + </div>
Removed / Before Commit
Added / After Commit
+ @props(['icons' => ['eye', 'pencil', 'route', 'check']]) + + <div {{ $attributes->merge(['class' => 'flex items-center justify-end gap-1.5']) }}> + @foreach ($icons as $icon) + <button type="button" class="grid h-8 w-8 place-items-center rounded-lg border border-ink-100 bg-white text-ink-500 shadow-soft transition hover:-translate-y-0.5 hover:border-brand-200 hover:text-brand-600"> + <x-dynamic-component :component="'lucide-' . $icon" class="h-3.5 w-3.5" /> + </button> + @endforeach + </div>
Removed / Before Commit
Added / After Commit
+ @props(['title', 'subtitle' => null]) + + <div> + <strong class="block text-[13px] font-bold text-ink-900">{{ $title }}</strong> + @if ($subtitle) + <span class="mt-0.5 block text-[11.5px] font-medium text-ink-400">{{ $subtitle }}</span> + @endif + </div>
Removed / Before Commit
Added / After Commit
+ @props(['label', 'value', 'icon' => 'activity', 'trend' => null, 'tone' => 'neutral', 'countup' => true]) + + @php + $trendColor = [ + 'up' => 'text-aqua-600', + 'warn' => 'text-amber-600', + 'bad' => 'text-rose-500', + 'live' => 'text-brand-600', + 'neutral' => 'text-ink-400', + ][$tone] ?? 'text-ink-400'; + @endphp + + <div {{ $attributes->merge(['class' => 'card-hover reveal group relative flex min-h-[128px] min-w-0 flex-col justify-between overflow-hidden rounded-2xl border border-ink-100 bg-white p-4 shadow-soft']) }}> + <span class="absolute inset-x-0 top-0 h-[3px] bg-gradient-to-r from-brand-500 via-brand-400 to-transparent"></span> + + <div class="flex items-center justify-between gap-2"> + <span class="text-[11px] font-bold text-ink-500">{{ $label }}</span> + <span class="grid h-9 w-9 shrink-0 place-items-center rounded-xl bg-brand-50 text-brand-600 transition group-hover:scale-110 group-hover:bg-brand-500 group-hover:text-white">
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ @props(['label']) + + @php + $variants = [ + 'Active' => 'success', 'Available' => 'success', 'Completed' => 'success', 'Delivered' => 'success', 'Paid' => 'success', 'Passed' => 'success', 'Pass' => 'success', 'Approved' => 'success', 'Working' => 'success', 'Online' => 'success', 'Clear' => 'success', + 'Scheduled' => 'info', 'Under Review' => 'info', 'Out for Delivery' => 'info', 'Track' => 'info', 'Live' => 'info', 'Production' => 'info', 'Assigned' => 'info', 'Idle' => 'info', 'Mixing' => 'info', 'Quality Check' => 'info', 'Ready for Loading' => 'info', 'Ready for Dispatch' => 'info', + 'New' => 'warn', 'Pending' => 'warn', 'Queued' => 'warn', 'Batching' => 'warn', 'QC Hold' => 'warn', 'Wallet Hold' => 'warn', 'Hold' => 'warn', 'On Hold' => 'warn', 'Loading' => 'warn', 'Limited' => 'warn', 'In Progress' => 'warn', 'Need Resubmission' => 'warn', 'Traffic' => 'warn', 'Loading Queue' => 'warn', 'Maintenance' => 'warn', 'Outstanding' => 'warn', + 'Failed' => 'bad', 'Cancelled' => 'bad', 'Needs Assignment' => 'bad', 'Rejected' => 'bad', 'Blocked' => 'bad', 'Overdue' => 'bad', 'Offline' => 'bad', + ]; + + $variant = $variants[$label] ?? 'neutral'; + + $styles = [ + 'success' => 'bg-aqua-50 text-aqua-700', + 'info' => 'bg-brand-50 text-brand-700', + 'warn' => 'bg-amber-50 text-amber-700', + 'bad' => 'bg-rose-50 text-rose-600', + 'neutral' => 'bg-ink-100 text-ink-600',
Removed / Before Commit
Added / After Commit
+ @props([]) + + <div {{ $attributes->merge(['class' => 'reveal min-w-0 overflow-hidden rounded-3xl border border-ink-100 bg-white shadow-soft']) }}> + <div class="overflow-x-auto scrollbar-thin"> + <table class="w-full min-w-[760px] border-collapse"> + <thead> + <tr class="bg-gradient-to-b from-ink-50 to-white text-left text-[10.5px] font-extrabold uppercase tracking-wider text-ink-500"> + {{ $head }} + </tr> + </thead> + <tbody class="divide-y divide-ink-100"> + {{ $slot }} + </tbody> + </table> + </div> + </div>
Removed / Before Commit
Added / After Commit
+ @props(['items', 'active' => null]) + + @php($active = $active ?? $items[0]) + + <div {{ $attributes->merge(['class' => 'reveal mb-5 flex flex-wrap gap-2']) }}> + @foreach ($items as $item) + <button + type="button" + class="{{ $item === $active + ? 'bg-gradient-to-r from-brand-500 to-brand-400 text-white shadow-glow' + : 'border border-ink-200 bg-white text-ink-600 hover:border-brand-200 hover:text-brand-600' }} rounded-full px-4 py-2 text-xs font-bold transition" + > + {{ $item }} + </button> + @endforeach + </div>
Removed / Before Commit
Added / After Commit
+ @props([]) + + <td {{ $attributes->merge(['class' => 'px-5 py-3.5 text-[13px] font-semibold text-ink-700']) }}>{{ $slot }}</td>
Removed / Before Commit
Added / After Commit
+ @props([]) + + <th {{ $attributes->merge(['class' => 'whitespace-nowrap px-5 py-3.5']) }}>{{ $slot }}</th>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="B2B Company Admin Portal"> + <x-ui.page-header eyebrow="B2B Company Admin Portal" title="Block Group Dashboard" subtitle="A simpler company ERP dashboard for projects, employees, orders, invoices, payments, reports, profile, and settings."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="download">Export</x-ui.button> + <x-ui.button variant="primary" icon="plus">Create Order</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="grid grid-cols-1 gap-4 xl:grid-cols-[220px_1fr]"> + <x-ui.panel title="Company Portal" subtitle="Navigation"> + <div class="space-y-1.5"> + @foreach ($sidebar as $item) + <button type="button" class="flex w-full items-center justify-between rounded-2xl px-3 py-2 text-left text-xs font-extrabold {{ $loop->first ? 'bg-brand-50 text-brand-700' : 'text-ink-600 hover:bg-ink-50' }}"> + <span>{{ $item }}</span> + @if ($loop->first)<x-lucide-chevron-right class="h-3.5 w-3.5" />@endif + </button> + @endforeach + </div>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Company Management"> + <x-ui.page-header eyebrow="B2B Company Management" title="Companies" subtitle="Trade license, VAT, credit limits, sales ownership, verification, outstanding balance, and company detail tabs."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="file-down">Export</x-ui.button> + <x-ui.button variant="primary" icon="plus">Add Company</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <x-ui.tabs :items="$tabs" /> + + <x-ui.table> + <x-slot:head>
Removed / Before Commit
Added / After Commit
+ <x-layout.app :title="$name . ' — Customer Profile'"> + @php + $sTone = match($status) { + 'Active' => ['stripe' => 'bg-aqua-500', 'badge' => 'bg-aqua-50 text-aqua-700 ring-aqua-200', 'text' => 'text-aqua-600'], + 'Blocked' => ['stripe' => 'bg-rose-500', 'badge' => 'bg-rose-50 text-rose-700 ring-rose-200', 'text' => 'text-rose-600'], + 'Under Review' => ['stripe' => 'bg-amber-400', 'badge' => 'bg-amber-50 text-amber-700 ring-amber-200','text' => 'text-amber-600'], + default => ['stripe' => 'bg-ink-300', 'badge' => 'bg-ink-50 text-ink-600 ring-ink-200', 'text' => 'text-ink-500'], + }; + + $walletPct = $wallet_raw > 0 ? min(100, round(($wallet_raw / 50000) * 100)) : 0; + + $kycStatuses = collect($kyc)->pluck('status'); + $kycOverall = $kycStatuses->contains('Rejected') + ? 'Action Required' + : ($kycStatuses->every(fn ($s) => $s === 'Verified') ? 'Fully Verified' : 'Pending Review'); + $kycTone = match($kycOverall) { + 'Fully Verified' => 'bg-aqua-50 text-aqua-700 ring-aqua-200', + 'Action Required' => 'bg-rose-50 text-rose-700 ring-rose-200',
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Customer Management"> + <x-ui.page-header eyebrow="B2C Customers" title="Customer Management" subtitle="Customer profiles, mobile numbers, email, wallet balances, status, and order history."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="sliders-horizontal">Filter</x-ui.button> + <x-ui.button variant="primary" icon="plus">Add Customer</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <x-ui.table> + <x-slot:head> + <x-ui.th>Customer Name</x-ui.th> + <x-ui.th>Mobile</x-ui.th>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Dashboard"> + <x-ui.page-header eyebrow="Super Admin Portal" title="Dashboard" subtitle="Live Antfast control room for orders, companies, production, dispatch, finance, and verification."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="download">Export</x-ui.button> + <x-ui.button variant="primary" icon="plus">New Order</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6"> + @foreach ($kpis as $kpi) + <x-ui.stat-card :label="$kpi['label']" :value="$kpi['value']" :icon="$kpi['icon']" :trend="$kpi['trend']" :tone="$kpi['tone']" /> + @endforeach + </div> + + <div class="grid grid-cols-1 gap-4 xl:grid-cols-[1.4fr_.9fr_.9fr]"> + <x-ui.panel title="Monthly Revenue" subtitle="Revenue and order trend"> + <x-ui.chart :config="$ordersRevenueChart" height="300px" /> + </x-ui.panel>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Deliveries"> + <x-ui.page-header eyebrow="Live ops" title="Delivery Management" subtitle="Today's deliveries, live status, assignments, and timeline."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="calendar-days">Calendar</x-ui.button> + <x-ui.button variant="primary" icon="route">Optimize Routes</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="grid grid-cols-1 gap-4 lg:grid-cols-[1.6fr_1fr]"> + <div class="grid grid-cols-1 gap-4 sm:grid-cols-2"> + @foreach ($cards as $card) + <x-ui.feature-card :title="$card['title']" :subtitle="$card['sub']" :status="$card['status']"> + <x-ui.progress-bar :value="$card['progress']" /> + <p class="text-right text-xs font-extrabold text-ink-400">{{ $card['progress'] }}% complete</p> + </x-ui.feature-card> + @endforeach + </div> +
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Dispatch Management"> + <x-ui.page-header eyebrow="Dispatch Management" title="Dispatch" subtitle="Truck assignment, driver assignment, route planning, dispatch calendar, and live tracking."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="calendar-days">Calendar</x-ui.button> + <x-ui.button variant="primary" icon="route">Optimize Routes</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-5"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <x-ui.tabs :items="$screens" /> + + <div class="grid grid-cols-1 gap-4 xl:grid-cols-[1.3fr_.7fr]"> + <x-ui.table>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Drivers"> + <x-ui.page-header eyebrow="Fleet crew" title="Drivers" subtitle="Driver details, assigned deliveries, status, and contact."> + <x-slot:actions> + <x-ui.button variant="primary" icon="plus">Add Driver</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <x-ui.table> + <x-slot:head> + <x-ui.th>Driver</x-ui.th> + <x-ui.th>Assigned Deliveries</x-ui.th> + <x-ui.th>Status</x-ui.th> + <x-ui.th>Contact</x-ui.th> + <x-ui.th>Current Truck</x-ui.th> + <x-ui.th class="text-right">Actions</x-ui.th> + </x-slot:head> + @foreach ($rows as $row) + <tr class="transition hover:bg-brand-50/40">
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Finance"> + <x-ui.page-header eyebrow="Finance" title="Finance" subtitle="Invoices, payments, outstanding balances, credit notes, wallet, credit limit, and refunds."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="file-down">Statement</x-ui.button> + <x-ui.button variant="primary" icon="download">Export</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <x-ui.tabs :items="$tabs" /> + + <div class="grid grid-cols-1 gap-4 xl:grid-cols-[1.3fr_.7fr]"> + <x-ui.table>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Invoices"> + <x-ui.page-header eyebrow="Billing" title="Invoices" subtitle="Generate invoices, VAT invoices, receipts, PDF downloads, and email dispatch."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="mail">Email Batch</x-ui.button> + <x-ui.button variant="primary" icon="plus">Generate Invoice</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <x-ui.table> + <x-slot:head> + <x-ui.th>Invoice</x-ui.th> + <x-ui.th>Customer</x-ui.th> + <x-ui.th>Type</x-ui.th> + <x-ui.th>Amount</x-ui.th> + <x-ui.th>Status</x-ui.th> + <x-ui.th class="text-right">Actions</x-ui.th> + </x-slot:head> + @foreach ($rows as $row)
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Alerts"> + <x-ui.page-header eyebrow="Inbox" title="Notifications" subtitle="New orders, order updates, delivery alerts, and payment alerts."> + <x-slot:actions> + <x-ui.button variant="primary" icon="send">Send Notification</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <x-ui.panel> + <div class="space-y-2.5"> + @foreach ($items as $n) + <x-ui.list-item :icon="$n['icon']" :title="$n['title']" :desc="$n['desc']"> + <x-slot:trailing> + <span class="rounded-full bg-brand-50 px-3 py-1 text-[11px] font-bold text-brand-600">{{ $n['tag'] }}</span> + </x-slot:trailing> + </x-ui.list-item> + @endforeach + </div> + </x-ui.panel>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Orders"> + <x-ui.page-header eyebrow="Order Management" title="Orders" subtitle="Order lifecycle from creation through approval, plant assignment, loading, delivery, invoice, and payment."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="sliders-horizontal">Filters</x-ui.button> + <x-ui.button variant="primary" icon="plus">Create Admin Order</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($summary as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <x-ui.tabs :items="$tabs" /> + + <x-ui.table> + <x-slot:head>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Payments"> + <x-ui.page-header eyebrow="Cash flow" title="Payments" subtitle="Pending, paid, refunded, and failed payments at a glance."> + <x-slot:actions> + <x-ui.button variant="primary" icon="download">Export Payments</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <x-ui.table> + <x-slot:head> + <x-ui.th>Payment ID</x-ui.th> + <x-ui.th>Customer</x-ui.th> + <x-ui.th>Amount</x-ui.th>
Removed / Before Commit
Added / After Commit
+ @php + $statusTone = [ + 'Working' => ['badge' => 'bg-aqua-50 text-aqua-700 ring-aqua-100', 'dot' => 'bg-aqua-500', 'bar' => 'from-aqua-400 via-brand-400 to-brand-500', 'soft' => 'bg-aqua-50 text-aqua-700'], + 'Loading Queue' => ['badge' => 'bg-amber-50 text-amber-700 ring-amber-100', 'dot' => 'bg-amber-500', 'bar' => 'from-amber-400 via-brand-400 to-brand-500', 'soft' => 'bg-amber-50 text-amber-700'], + 'Maintenance' => ['badge' => 'bg-amber-50 text-amber-700 ring-amber-100', 'dot' => 'bg-amber-500', 'bar' => 'from-amber-400 via-amber-300 to-brand-400', 'soft' => 'bg-amber-50 text-amber-700'], + 'Idle' => ['badge' => 'bg-brand-50 text-brand-700 ring-brand-100', 'dot' => 'bg-brand-500', 'bar' => 'from-brand-400 via-brand-300 to-aqua-300', 'soft' => 'bg-brand-50 text-brand-700'], + 'Offline' => ['badge' => 'bg-rose-50 text-rose-600 ring-rose-100', 'dot' => 'bg-rose-500', 'bar' => 'from-rose-500 via-rose-400 to-amber-300', 'soft' => 'bg-rose-50 text-rose-600'], + ]; + $sTone = $statusTone[$plant['status']] ?? ['badge' => 'bg-ink-100 text-ink-600 ring-ink-200', 'dot' => 'bg-ink-400', 'bar' => 'from-ink-300 to-ink-200', 'soft' => 'bg-ink-100 text-ink-600']; + + $connectionTone = $plant['connection'] === 'Online' + ? ['badge' => 'bg-aqua-50 text-aqua-700 ring-aqua-100', 'dot' => 'bg-aqua-500'] + : ['badge' => 'bg-rose-50 text-rose-600 ring-rose-100', 'dot' => 'bg-rose-500']; + + $utilPct = (int) $plant['current_utilization']; + $utilTone = $utilPct > 85 ? 'text-amber-600' : ($utilPct > 0 ? 'text-brand-600' : 'text-rose-500'); + $utilBar = $utilPct > 85 ? 'from-amber-400 to-amber-500' : ($utilPct > 0 ? 'from-brand-500 via-brand-400 to-aqua-400' : 'from-rose-400 to-rose-300'); +
Removed / Before Commit
Added / After Commit
+ @php + $statusDefs = [ + 'Working' => ['badge' => 'text-aqua-700 bg-aqua-50 ring-aqua-100', 'dot' => 'bg-aqua-500', 'strip' => 'bg-aqua-500', 'bar' => 'bg-aqua-400'], + 'Loading Queue' => ['badge' => 'text-amber-700 bg-amber-50 ring-amber-100', 'dot' => 'bg-amber-500', 'strip' => 'bg-amber-400', 'bar' => 'bg-amber-400'], + 'Maintenance' => ['badge' => 'text-amber-700 bg-amber-50 ring-amber-100', 'dot' => 'bg-amber-400', 'strip' => 'bg-amber-300', 'bar' => 'bg-amber-300'], + 'Idle' => ['badge' => 'text-brand-700 bg-brand-50 ring-brand-100', 'dot' => 'bg-brand-400', 'strip' => 'bg-brand-400', 'bar' => 'bg-brand-300'], + 'Offline' => ['badge' => 'text-rose-600 bg-rose-50 ring-rose-100', 'dot' => 'bg-rose-500', 'strip' => 'bg-rose-500', 'bar' => 'bg-rose-400'], + ]; + + $statusCounts = collect($rows)->groupBy('status')->map->count(); + $onlineCount = collect($rows)->where('connection', 'Online')->count(); + $offlineCount = collect($rows)->where('connection', 'Offline')->count(); + $totalPlants = count($rows); + $totalCapacity = collect($rows)->sum('capacity'); + $totalOrders = collect($rows)->sum('active_orders'); + $todayOrders = collect($rows)->sum('today_active_orders'); + @endphp +
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ @php + $capacityFilters = [ + ['value' => 'lt1000', 'label' => 'Under 1,000'], + ['value' => '1000-1199', 'label' => '1,000-1,199'], + ['value' => '1200-1499', 'label' => '1,200-1,499'], + ['value' => 'gte1500', 'label' => '1,500+'], + ]; + @endphp + + <x-layout.app title="Plant Management"> + <x-ui.page-header eyebrow="Plant Management" title="Plants" subtitle="Enterprise plant master data, capacity coverage, live order load, site availability, and operating status."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="file-down" data-export="csv" form="plants-table-form">Export</x-ui.button> + <x-ui.button variant="primary" icon="plus">Add Plant</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4">
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Pricing Engine"> + <x-ui.page-header eyebrow="Pricing Engine" title="Pricing" subtitle="Retail, corporate, project, and special contract pricing with company-specific price lists."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="upload">Import</x-ui.button> + <x-ui.button variant="primary" icon="plus">New Price List</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <div class="mb-4 grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4"> + @foreach ($tiers as $tier) + <x-ui.feature-card :title="$tier['title']" :subtitle="$tier['desc']" :status="$tier['status']"> + <x-ui.button variant="ghost" icon="settings">Configure</x-ui.button>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Products"> + <x-ui.page-header eyebrow="Product Management" title="Products" subtitle="Concrete mixes, cement, pump services, additional charges, delivery charges, and availability."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="upload">Import Pricing</x-ui.button> + <x-ui.button variant="primary" icon="plus">Add Product</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 flex flex-wrap gap-2"> + @foreach ($categories as $category) + <span class="rounded-full border border-ink-200 bg-white px-4 py-2 text-xs font-bold text-ink-600 shadow-soft">{{ $category }}</span> + @endforeach + </div> + + <div class="mb-4 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3"> + @foreach ($cards as $card) + <x-ui.feature-card :title="$card['name']" :subtitle="$card['category'] . ' - ' . $card['sub']" :status="$card['status']"> + <p class="font-display text-xl font-extrabold text-ink-900">{{ $card['price'] }}</p>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Project Management"> + <x-ui.page-header eyebrow="Project Management" title="Projects" subtitle="Company projects, project managers, locations, delivery sites, orders, and verification status."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="map-pin">Map View</x-ui.button> + <x-ui.button variant="primary" icon="plus">New Project</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <div class="mb-4 grid grid-cols-1 gap-4 lg:grid-cols-[.8fr_1.2fr]"> + <x-ui.panel title="Project Hierarchy" subtitle="Company to project to tower/site"> + <div class="space-y-2.5"> + @foreach ($hierarchy as $item)
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Quality Control"> + <x-ui.page-header eyebrow="Assurance" title="Quality Control" subtitle="Batching check, loading verification, delivery verification, and signatures."> + <x-slot:actions> + <x-ui.button variant="primary" icon="plus">New QC Report</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="grid grid-cols-1 gap-4 lg:grid-cols-[1.6fr_1fr]"> + <div class="grid grid-cols-1 gap-4 sm:grid-cols-2"> + @foreach ($cards as $card) + <x-ui.feature-card :title="$card['title']" :subtitle="$card['desc']" :status="$card['status']"> + <x-ui.progress-bar :value="$card['progress']" /> + <p class="text-right text-xs font-extrabold text-ink-400">{{ $card['progress'] }}% verified</p> + </x-ui.feature-card> + @endforeach + </div> + + <x-ui.feature-card :title="$officer['name']" :subtitle="$officer['role']">
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Reports"> + <x-ui.page-header eyebrow="Reports" title="Reports" subtitle="Sales, revenue, projects, companies, orders, plants, drivers, and dispatch reporting."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="file-down">PDF</x-ui.button> + <x-ui.button variant="primary" icon="download">Export</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-6"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach + </div> + + <div class="grid grid-cols-1 gap-4 xl:grid-cols-[1.2fr_.8fr]"> + <x-ui.panel title="Revenue and Deliveries" subtitle="Monthly performance"> + <x-ui.chart :config="$chart" height="320px" /> + </x-ui.panel>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Roles & Permissions"> + <x-ui.page-header eyebrow="Roles & Permissions" title="Roles" subtitle="Super Admin, Operations, Sales, Dispatch, Finance, Plant Manager, Warehouse, and Support access control."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="copy">Clone Role</x-ui.button> + <x-ui.button variant="primary" icon="plus">New Role</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-4 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"> + @foreach ($roles as $role) + <x-ui.feature-card :title="$role['name']" :subtitle="$role['scope']" :status="$role['status']"> + <x-ui.field label="Users" :value="$role['users']" /> + </x-ui.feature-card> + @endforeach + </div> + + <x-ui.table> + <x-slot:head>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Settings"> + <x-ui.page-header eyebrow="Configuration" title="Settings" subtitle="Company settings, app settings, notification templates, taxes, delivery charges, and service areas."> + <x-slot:actions> + <x-ui.button variant="primary" icon="check">Save Changes</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3"> + @foreach ($groups as $group) + <x-ui.panel :title="$group['title']"> + <div class="space-y-2.5"> + @foreach ($group['fields'] as $f) + <x-ui.field :label="$f['label']" :value="$f['value']" /> + @endforeach + </div> + </x-ui.panel> + @endforeach + </div>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Trucks"> + <x-ui.page-header eyebrow="Fleet" title="Delivery Trucks" subtitle="Fleet availability, assigned drivers, capacity, and current order."> + <x-slot:actions> + <x-ui.button variant="primary" icon="plus">Add Truck</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"> + @foreach ($cards as $card) + <x-ui.feature-card :title="$card['code']" :subtitle="$card['sub']" :status="$card['status']"> + <x-ui.field label="Current Order" :value="$card['order']" /> + <x-ui.progress-bar :value="$card['progress']" /> + <p class="text-right text-xs font-extrabold text-ink-400">{{ $card['progress'] }}% load capacity</p> + </x-ui.feature-card> + @endforeach + </div> + </x-layout.app>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Users"> + <x-ui.page-header eyebrow="Access control" title="Users" subtitle="Admin users, roles, permissions, and operational access."> + <x-slot:actions> + <x-ui.button variant="primary" icon="user-plus">Add User</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"> + @foreach ($cards as $card) + <x-ui.feature-card :title="$card['name']" :subtitle="$card['sub']" :status="$card['status']"> + <div class="flex items-center gap-3"> + <x-ui.avatar :name="$card['name']" /> + <div class="flex-1"> + <x-ui.progress-bar :value="$card['progress']" /> + </div> + <span class="text-xs font-extrabold text-ink-500">{{ $card['progress'] }}%</span> + </div> + </x-ui.feature-card>
Removed / Before Commit
- \ No newline at end of file
Added / After Commit
+ <x-layout.app title="Verification"> + <x-ui.page-header eyebrow="Verification Module" title="Verification" subtitle="Company document queue for trade license, VAT, approval, rejection, and resubmission comments."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="message-square">Comment</x-ui.button> + <x-ui.button variant="primary" icon="check">Approve Selected</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4"> + @foreach ($cards as $card) + <x-ui.feature-card :title="$card['title']" subtitle="Verification queue" :status="$card['status']"> + <div class="flex items-center justify-between"> + <strong class="font-display text-3xl font-extrabold text-ink-900">{{ $card['value'] }}</strong> + <span class="grid h-11 w-11 place-items-center rounded-2xl bg-brand-50 text-brand-600"> + <x-dynamic-component :component="'lucide-' . $card['icon']" class="h-5 w-5" /> + </span> + </div> + </x-ui.feature-card>
Removed / Before Commit
Added / After Commit
+ <x-layout.app title="Wallet"> + <x-ui.page-header eyebrow="Treasury" title="Wallet" subtitle="Deposits, reserved amount, spends, refunds, and wallet history."> + <x-slot:actions> + <x-ui.button variant="ghost" icon="file-text">Statement</x-ui.button> + <x-ui.button variant="primary" icon="plus">Manual Deposit</x-ui.button> + </x-slot:actions> + </x-ui.page-header> + + <div class="mb-5 grid grid-cols-1 gap-4 lg:grid-cols-[1.1fr_3fr]"> + <div class="noise relative flex min-h-[170px] flex-col justify-between overflow-hidden rounded-3xl border border-white/10 bg-gradient-to-br from-navy-700 via-brand-800 to-brand-500 p-5 text-white shadow-lift"> + <span class="text-xs font-bold text-white/70">Total Wallet Balance</span> + <strong class="font-display text-[30px] font-extrabold leading-none">{{ $balance }}</strong> + <span class="text-xs font-semibold text-white/60">Available across active customers</span> + </div> + <div class="grid grid-cols-2 gap-3 sm:grid-cols-4"> + @foreach ($stats as $s) + <x-ui.stat-card :label="$s['label']" :value="$s['value']" :icon="$s['icon']" :trend="$s['trend']" :tone="$s['tone']" /> + @endforeach
Removed / Before Commit
Added / After Commit
+ <!DOCTYPE html> + <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>{{ config('app.name', 'Laravel') }}</title> + + <!-- Fonts --> + <link rel="preconnect" href="https://fonts.bunny.net"> + <link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600" rel="stylesheet" /> + + <!-- Styles / Scripts --> + @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) + @else + <style> + /*! tailwindcss v4.0.7 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:'Instrument Sans',ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-500:oklch(.795 .184 86.047);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-yellow-950:oklch(.286 .066 53.813);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-300:oklch(.897 .196 126.665);--color-lime-400:oklch(.841 .238 128.85);--color-lime-500:oklch(.768 .233 130.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-700:oklch(.532 .157 131.589);--color-lime-800:oklch(.453 .124 130.933);--color-lime-900:oklch(.405 .101 131.063);--color-lime-950:oklch(.274 .072 132.109);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-green-950:oklch(.266 .065 152.934);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-800:oklch(.432 .095 166.913);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-300:oklch(.855 .138 181.071);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-teal-950:oklch(.277 .046 192.524);--color-cyan-50:oklch(.984 .019 200.873);--color-cyan-100:oklch(.956 .045 203.388);--color-cyan-200:oklch(.917 .08 205.041);--color-cyan-300:oklch(.865 .127 207.078);--color-cyan-400:oklch(.789 .154 211.53);--color-cyan-500:oklch(.715 .143 215.221);--color-cyan-600:oklch(.609 .126 221.723);--color-cyan-700:oklch(.52 .105 223.128);--color-cyan-800:oklch(.45 .085 224.283);--color-cyan-900:oklch(.398 .07 227.392);--color-cyan-950:oklch(.302 .056 229.695);--color-sky-50:oklch(.977 .013 236.62);--color-sky-100:oklch(.951 .026 236.824);--color-sky-200:oklch(.901 .058 230.902);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-sky-800:oklch(.443 .11 240.79);--color-sky-900:oklch(.391 .09 240.876);--color-sky-950:oklch(.293 .066 243.157);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-indigo-950:oklch(.257 .09 281.288);--color-violet-50:oklch(.969 .016 293.756);--color-violet-100:oklch(.943 .029 294.588);--color-violet-200:oklch(.894 .057 293.283);--color-violet-300:oklch(.811 .111 293.571);--color-violet-400:oklch(.702 .183 293.541);--color-violet-500:oklch(.606 .25 292.717);--color-violet-600:oklch(.541 .281 293.009);--color-violet-700:oklch(.491 .27 292.581);--color-violet-800:oklch(.432 .232 292.759);--color-violet-900:oklch(.38 .189 293.745);--color-violet-950:oklch(.283 .141 291.089);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-purple-950:oklch(.291 .149 302.717);--color-fuchsia-50:oklch(.977 .017 320.058);--color-fuchsia-100:oklch(.952 .037 318.852);--color-fuchsia-200:oklch(.903 .076 319.62);--color-fuchsia-300:oklch(.833 .145 321.434);--color-fuchsia-400:oklch(.74 .238 322.16);--color-fuchsia-500:oklch(.667 .295 322.15);--color-fuchsia-600:oklch(.591 .293 322.896);--color-fuchsia-700:oklch(.518 .253 323.949);--color-fuchsia-800:oklch(.452 .211 324.591);--color-fuchsia-900:oklch(.401 .17 325.612);--color-fuchsia-950:oklch(.293 .136 325.661);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-200:oklch(.899 .061 343.231);--color-pink-300:oklch(.823 .12 346.018);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-700:oklch(.525 .223 3.958);--color-pink-800:oklch(.459 .187 3.815);--color-pink-900:oklch(.408 .153 2.432);--color-pink-950:oklch(.284 .109 3.907);--color-rose-50:oklch(.969 .015 12.422);--color-rose-100:oklch(.941 .03 12.58);--color-rose-200:oklch(.892 .058 10.001);--color-rose-300:oklch(.81 .117 11.638);--color-rose-400:oklch(.712 .194 13.428);--color-rose-500:oklch(.645 .246 16.439);--color-rose-600:oklch(.586 .253 17.585);--color-rose-700:oklch(.514 .222 16.935);--color-rose-800:oklch(.455 .188 13.697);--color-rose-900:oklch(.41 .159 10.272);--color-rose-950:oklch(.271 .105 12.094);--color-slate-50:oklch(.984 .003 247.858);--color-slate-100:oklch(.968 .007 247.896);--color-slate-200:oklch(.929 .013 255.508);--color-slate-300:oklch(.869 .022 252.894);--color-slate-400:oklch(.704 .04 256.788);--color-slate-500:oklch(.554 .046 257.417);--color-slate-600:oklch(.446 .043 257.281);--color-slate-700:oklch(.372 .044 257.287);--color-slate-800:oklch(.279 .041 260.031);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-50:oklch(.985 0 0);--color-neutral-100:oklch(.97 0 0);--color-neutral-200:oklch(.922 0 0);--color-neutral-300:oklch(.87 0 0);--color-neutral-400:oklch(.708 0 0);--color-neutral-500:oklch(.556 0 0);--color-neutral-600:oklch(.439 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-neutral-950:oklch(.145 0 0);--color-stone-50:oklch(.985 .001 106.423);--color-stone-100:oklch(.97 .001 106.424);--color-stone-200:oklch(.923 .003 48.717);--color-stone-300:oklch(.869 .005 56.366);--color-stone-400:oklch(.709 .01 56.259);--color-stone-500:oklch(.553 .013 58.071);--color-stone-600:oklch(.444 .011 73.639);--color-stone-700:oklch(.374 .01 67.558);--color-stone-800:oklch(.268 .007 34.298);--color-stone-900:oklch(.216 .006 56.043);--color-stone-950:oklch(.147 .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-4xl:2rem;--shadow-2xs:0 1px #0000000d;--shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--shadow-2xl:0 25px 50px -12px #00000040;--inset-shadow-2xs:inset 0 1px #0000000d;--inset-shadow-xs:inset 0 1px 1px #0000000d;--inset-shadow-sm:inset 0 2px 4px #0000000d;--drop-shadow-xs:0 1px 1px #0000000d;--drop-shadow-sm:0 1px 2px #00000026;--drop-shadow-md:0 3px 3px #0000001f;--drop-shadow-lg:0 4px 4px #00000026;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-xs:4px;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--perspective-dramatic:100px;--perspective-near:300px;--perspective-normal:500px;--perspective-midrange:800px;--perspective-distant:1200px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-mt-\[4\.9rem\]{margin-top:-4.9rem}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-8{margin-left:calc(var(--spacing)*-8)}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-\[335\/376\]{aspect-ratio:335/376}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-14{height:calc(var(--spacing)*14)}.h-14\.5{height:calc(var(--spacing)*14.5)}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-\[448px\]{width:448px}.w-full{width:100%}.max-w-\[335px\]{max-width:335px}.max-w-none{max-width:none}.flex-1{flex:1}.shrink-0{flex-shrink:0}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-br-lg{border-bottom-right-radius:var(--radius-lg)}.rounded-bl-lg{border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[\#19140035\]{border-color:#19140035}.border-\[\#e3e3e0\]{border-color:#e3e3e0}.border-black{border-color:var(--color-black)}.border-transparent{border-color:#0000}.bg-\[\#1b1b18\]{background-color:#1b1b18}.bg-\[\#FDFDFC\]{background-color:#fdfdfc}.bg-\[\#dbdbd7\]{background-color:#dbdbd7}.bg-\[\#fff2f2\]{background-color:#fff2f2}.bg-white{background-color:var(--color-white)}.p-6{padding:calc(var(--spacing)*6)}.px-5{padding-inline:calc(var(--spacing)*5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-\[13px\]{font-size:13px}.leading-\[20px\]{--tw-leading:20px;line-height:20px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-\[\#1b1b18\]{color:#1b1b18}.text-\[\#706f6c\]{color:#706f6c}.text-\[\#F53003\],.text-\[\#f53003\]{color:#f53003}.text-white{color:var(--color-white)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-100{opacity:1}.shadow-\[0px_0px_1px_0px_rgba\(0\,0\,0\,0\.03\)\,0px_1px_2px_0px_rgba\(0\,0\,0\,0\.06\)\]{--tw-shadow:0px 0px 1px 0px var(--tw-shadow-color,#00000008),0px 1px 2px 0px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0px_0px_0px_1px_rgba\(26\,26\,0\,0\.16\)\]{--tw-shadow:inset 0px 0px 0px 1px var(--tw-shadow-color,#1a1a0029);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\!filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-300{transition-delay:.3s}.duration-750{--tw-duration:.75s;transition-duration:.75s}.not-has-\[nav\]\:hidden:not(:has(:is(nav))){display:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-0:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.before\:top-1\/2:before{content:var(--tw-content);top:50%}.before\:bottom-0:before{content:var(--tw-content);bottom:calc(var(--spacing)*0)}.before\:bottom-1\/2:before{content:var(--tw-content);bottom:50%}.before\:left-\[0\.4rem\]:before{content:var(--tw-content);left:.4rem}.before\:border-l:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:1px}.before\:border-\[\#e3e3e0\]:before{content:var(--tw-content);border-color:#e3e3e0}@media (hover:hover){.hover\:border-\[\#1915014a\]:hover{border-color:#1915014a}.hover\:border-\[\#19140035\]:hover{border-color:#19140035}.hover\:border-black:hover{border-color:var(--color-black)}.hover\:bg-black:hover{background-color:var(--color-black)}}@media (width>=64rem){.lg\:-mt-\[6\.6rem\]{margin-top:-6.6rem}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:mb-6{margin-bottom:calc(var(--spacing)*6)}.lg\:-ml-px{margin-left:-1px}.lg\:ml-0{margin-left:calc(var(--spacing)*0)}.lg\:block{display:block}.lg\:aspect-auto{aspect-ratio:auto}.lg\:w-\[438px\]{width:438px}.lg\:max-w-4xl{max-width:var(--container-4xl)}.lg\:grow{flex-grow:1}.lg\:flex-row{flex-direction:row}.lg\:justify-center{justify-content:center}.lg\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.lg\:rounded-tl-lg{border-top-left-radius:var(--radius-lg)}.lg\:rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.lg\:rounded-br-none{border-bottom-right-radius:0}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-20{padding:calc(var(--spacing)*20)}}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}.dark\:border-\[\#3E3E3A\]{border-color:#3e3e3a}.dark\:border-\[\#eeeeec\]{border-color:#eeeeec}.dark\:bg-\[\#0a0a0a\]{background-color:#0a0a0a}.dark\:bg-\[\#1D0002\]{background-color:#1d0002}.dark\:bg-\[\#3E3E3A\]{background-color:#3e3e3a}.dark\:bg-\[\#161615\]{background-color:#161615}.dark\:bg-\[\#eeeeec\]{background-color:#eeeeec}.dark\:text-\[\#1C1C1A\]{color:#1c1c1a}.dark\:text-\[\#A1A09A\]{color:#a1a09a}.dark\:text-\[\#EDEDEC\]{color:#ededec}.dark\:text-\[\#F61500\]{color:#f61500}.dark\:text-\[\#FF4433\]{color:#f43}.dark\:shadow-\[inset_0px_0px_0px_1px_\#fffaed2d\]{--tw-shadow:inset 0px 0px 0px 1px var(--tw-shadow-color,#fffaed2d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\:before\:border-\[\#3E3E3A\]:before{content:var(--tw-content);border-color:#3e3e3a}@media (hover:hover){.dark\:hover\:border-\[\#3E3E3A\]:hover{border-color:#3e3e3a}.dark\:hover\:border-\[\#62605b\]:hover{border-color:#62605b}.dark\:hover\:border-white:hover{border-color:var(--color-white)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}}}@starting-style{.starting\:translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}}@starting-style{.starting\:translate-y-6{--tw-translate-y:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}}@starting-style{.starting\:opacity-0{opacity:0}}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Foundation\Inspiring; + use Illuminate\Support\Facades\Artisan; + + Artisan::command('inspire', function () { + $this->comment(Inspiring::quote()); + })->purpose('Display an inspiring quote');
Removed / Before Commit
Added / After Commit
+ <?php + + use App\Http\Controllers\B2bPortalController; + use App\Http\Controllers\CompanyController; + use App\Http\Controllers\CustomerController; + use App\Http\Controllers\DashboardController; + use App\Http\Controllers\DeliveryController; + use App\Http\Controllers\DispatchController; + use App\Http\Controllers\DriverController; + use App\Http\Controllers\FinanceController; + use App\Http\Controllers\InvoiceController; + use App\Http\Controllers\NotificationController; + use App\Http\Controllers\OrderController; + use App\Http\Controllers\PaymentController; + use App\Http\Controllers\PlantController; + use App\Http\Controllers\PricingController; + use App\Http\Controllers\ProductController; + use App\Http\Controllers\ProjectController;
Removed / Before Commit
Added / After Commit
+ * + !private/ + !public/ + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ compiled.php + config.php + down + events.scanned.php + maintenance.php + routes.php + routes.scanned.php + schedule-* + services.json
Removed / Before Commit
Added / After Commit
+ * + !data/ + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ * + !.gitignore
Removed / Before Commit
Added / After Commit
+ <?php + + namespace Tests\Feature; + + // use Illuminate\Foundation\Testing\RefreshDatabase; + use Tests\TestCase; + + class ExampleTest extends TestCase + { + /** + * A basic test example. + */ + public function test_the_application_returns_a_successful_response(): void + { + $response = $this->get('/'); + + $response->assertStatus(200); + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace Tests; + + use Illuminate\Foundation\Testing\TestCase as BaseTestCase; + + abstract class TestCase extends BaseTestCase + { + // + }
Removed / Before Commit
Added / After Commit
+ <?php + + namespace Tests\Unit; + + use PHPUnit\Framework\TestCase; + + class ExampleTest extends TestCase + { + /** + * A basic test example. + */ + public function test_that_true_is_true(): void + { + $this->assertTrue(true); + } + }
Removed / Before Commit
Added / After Commit
+ import { defineConfig } from 'vite'; + import laravel from 'laravel-vite-plugin'; + import tailwindcss from '@tailwindcss/vite'; + + export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + tailwindcss(), + ], + server: { + watch: { + ignored: ['**/storage/framework/views/**'], + }, + }, + });