浏览代码

Merge pull request #61 from andrewdwallo/development-3.x

Development 3.x
3.x
Andrew Wallo 1年前
父节点
当前提交
2e787f80e3
没有帐户链接到提交者的电子邮件

+ 0
- 25
app/Events/CompanyGenerated.php 查看文件

@@ -1,25 +0,0 @@
1
-<?php
2
-
3
-namespace App\Events;
4
-
5
-use App\Models\Company;
6
-use App\Models\User;
7
-use Illuminate\Foundation\Events\Dispatchable;
8
-use Illuminate\Queue\SerializesModels;
9
-
10
-class CompanyGenerated
11
-{
12
-    use Dispatchable;
13
-    use SerializesModels;
14
-
15
-    /**
16
-     * Create a new event instance.
17
-     */
18
-    public function __construct(
19
-        public User $user,
20
-        public Company $company,
21
-        public string $country,
22
-        public string $language = 'en',
23
-        public string $currency = 'USD'
24
-    ) {}
25
-}

+ 1
- 1
app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php 查看文件

@@ -125,7 +125,7 @@ class CompanyProfile extends Page
125 125
     protected function getTimezoneChangeNotification(): Notification
126 126
     {
127 127
         return Notification::make()
128
-            ->warning()
128
+            ->info()
129 129
             ->title('Timezone Update Required')
130 130
             ->body('You have changed your country or state. Please update your timezone to ensure accurate date and time information.')
131 131
             ->actions([

+ 20
- 17
app/Filament/Company/Pages/CreateCompany.php 查看文件

@@ -3,16 +3,17 @@
3 3
 namespace App\Filament\Company\Pages;
4 4
 
5 5
 use App\Enums\Setting\EntityType;
6
-use App\Events\CompanyGenerated;
7 6
 use App\Models\Company;
8 7
 use App\Models\Locale\Country;
9 8
 use App\Models\Setting\Localization;
9
+use App\Services\CompanyDefaultService;
10 10
 use App\Utilities\Currency\CurrencyAccessor;
11 11
 use Filament\Forms\Components\Select;
12 12
 use Filament\Forms\Components\TextInput;
13 13
 use Filament\Forms\Form;
14 14
 use Illuminate\Database\Eloquent\Model;
15 15
 use Illuminate\Support\Facades\Auth;
16
+use Illuminate\Support\Facades\DB;
16 17
 use Illuminate\Support\Facades\Gate;
17 18
 use Wallo\FilamentCompanies\Events\AddingCompany;
18 19
 use Wallo\FilamentCompanies\FilamentCompanies;
@@ -69,26 +70,28 @@ class CreateCompany extends FilamentCreateCompany
69 70
 
70 71
         $personalCompany = $user?->personalCompany() === null;
71 72
 
72
-        /** @var Company $company */
73
-        $company = $user?->ownedCompanies()->create([
74
-            'name' => $data['name'],
75
-            'personal_company' => $personalCompany,
76
-        ]);
73
+        return DB::transaction(function () use ($user, $data, $personalCompany) {
74
+            /** @var Company $company */
75
+            $company = $user?->ownedCompanies()->create([
76
+                'name' => $data['name'],
77
+                'personal_company' => $personalCompany,
78
+            ]);
77 79
 
78
-        $company->profile()->create([
79
-            'email' => $data['profile']['email'],
80
-            'entity_type' => $data['profile']['entity_type'],
81
-            'country' => $data['profile']['country'],
82
-        ]);
80
+            $company->profile()->create([
81
+                'email' => $data['profile']['email'],
82
+                'entity_type' => $data['profile']['entity_type'],
83
+                'country' => $data['profile']['country'],
84
+            ]);
83 85
 
84
-        $user?->switchCompany($company);
86
+            $user?->switchCompany($company);
85 87
 
86
-        $name = $data['name'];
88
+            $companyDefaultService = app()->make(CompanyDefaultService::class);
89
+            $user = $company->owner ?? $user;
90
+            $companyDefaultService->createCompanyDefaults($company, $user, $data['currencies']['code'], $data['profile']['country'], $data['locale']['language']);
87 91
 
88
-        CompanyGenerated::dispatch($user ?? Auth::user(), $company, $data['profile']['country'], $data['locale']['language'], $data['currencies']['code']);
92
+            $this->companyCreated($data['name']);
89 93
 
90
-        $this->companyCreated($name);
91
-
92
-        return $company;
94
+            return $company;
95
+        });
93 96
     }
94 97
 }

+ 36
- 2
app/Filament/Company/Pages/Reports/AccountTransactions.php 查看文件

@@ -4,6 +4,7 @@ namespace App\Filament\Company\Pages\Reports;
4 4
 
5 5
 use App\Contracts\ExportableReport;
6 6
 use App\DTO\ReportDTO;
7
+use App\Filament\Company\Pages\Accounting\Transactions;
7 8
 use App\Models\Accounting\Account;
8 9
 use App\Services\ExportService;
9 10
 use App\Services\ReportService;
@@ -13,9 +14,10 @@ use Filament\Forms\Components\Actions;
13 14
 use Filament\Forms\Components\Select;
14 15
 use Filament\Forms\Form;
15 16
 use Filament\Support\Enums\Alignment;
17
+use Filament\Tables\Actions\Action;
16 18
 use Guava\FilamentClusters\Forms\Cluster;
19
+use Illuminate\Contracts\Support\Htmlable;
17 20
 use Illuminate\Support\Collection;
18
-use Livewire\Attributes\Session;
19 21
 use Symfony\Component\HttpFoundation\StreamedResponse;
20 22
 
21 23
 class AccountTransactions extends BaseReportPage
@@ -30,7 +32,6 @@ class AccountTransactions extends BaseReportPage
30 32
 
31 33
     protected ExportService $exportService;
32 34
 
33
-    #[Session]
34 35
     public ?string $account_id = 'all';
35 36
 
36 37
     public function boot(ReportService $reportService, ExportService $exportService): void
@@ -122,4 +123,37 @@ class AccountTransactions extends BaseReportPage
122 123
     {
123 124
         return $this->exportService->exportToPdf($this->company, $this->report, $this->startDate, $this->endDate);
124 125
     }
126
+
127
+    public function getEmptyStateHeading(): string | Htmlable
128
+    {
129
+        return 'No Transactions Found';
130
+    }
131
+
132
+    public function getEmptyStateDescription(): string | Htmlable | null
133
+    {
134
+        return 'Adjust the account or date range, or start by creating a transaction.';
135
+    }
136
+
137
+    public function getEmptyStateIcon(): string
138
+    {
139
+        return 'heroicon-o-x-mark';
140
+    }
141
+
142
+    public function getEmptyStateActions(): array
143
+    {
144
+        return [
145
+            Action::make('createTransaction')
146
+                ->label('Create Transaction')
147
+                ->url(Transactions::getUrl()),
148
+        ];
149
+    }
150
+
151
+    public function tableHasEmptyState(): bool
152
+    {
153
+        if ($this->report) {
154
+            return empty($this->report->getCategories());
155
+        } else {
156
+            return true;
157
+        }
158
+    }
125 159
 }

+ 0
- 3
app/Filament/Company/Pages/Reports/BaseReportPage.php 查看文件

@@ -26,13 +26,10 @@ use Symfony\Component\HttpFoundation\StreamedResponse;
26 26
 
27 27
 abstract class BaseReportPage extends Page
28 28
 {
29
-    #[Session]
30 29
     public string $startDate = '';
31 30
 
32
-    #[Session]
33 31
     public string $endDate = '';
34 32
 
35
-    #[Session]
36 33
     public string $dateRange = '';
37 34
 
38 35
     public string $fiscalYearStartDate = '';

+ 0
- 29
app/Listeners/ConfigureChartOfAccounts.php 查看文件

@@ -1,29 +0,0 @@
1
-<?php
2
-
3
-namespace App\Listeners;
4
-
5
-use App\Events\CompanyGenerated;
6
-use App\Services\ChartOfAccountsService;
7
-
8
-class ConfigureChartOfAccounts
9
-{
10
-    /**
11
-     * Create the event listener.
12
-     */
13
-    public function __construct()
14
-    {
15
-        //
16
-    }
17
-
18
-    /**
19
-     * Handle the event.
20
-     */
21
-    public function handle(CompanyGenerated $event): void
22
-    {
23
-        $company = $event->company;
24
-
25
-        $chartOfAccountsService = new ChartOfAccountsService();
26
-
27
-        $chartOfAccountsService->createChartOfAccounts($company);
28
-    }
29
-}

+ 0
- 33
app/Listeners/CreateCompanyDefaults.php 查看文件

@@ -1,33 +0,0 @@
1
-<?php
2
-
3
-namespace App\Listeners;
4
-
5
-use App\Events\CompanyGenerated;
6
-use App\Services\CompanyDefaultService;
7
-
8
-class CreateCompanyDefaults
9
-{
10
-    /**
11
-     * Create the event listener.
12
-     */
13
-    public function __construct()
14
-    {
15
-        //
16
-    }
17
-
18
-    /**
19
-     * Handle the event.
20
-     */
21
-    public function handle(CompanyGenerated $event): void
22
-    {
23
-        $company = $event->company;
24
-        $countryCode = $event->country;
25
-        $languageCode = $event->language;
26
-        $currency = $event->currency;
27
-
28
-        $user = $company->owner;
29
-
30
-        $companyDefaultService = new CompanyDefaultService();
31
-        $companyDefaultService->createCompanyDefaults($company, $user, $currency, $countryCode, $languageCode);
32
-    }
33
-}

+ 5
- 0
app/Services/ChartOfAccountsService.php 查看文件

@@ -81,4 +81,9 @@ class ChartOfAccountsService
81 81
             'updated_by' => $company->owner->id,
82 82
         ]);
83 83
     }
84
+
85
+    public function getDefaultBankAccount(Company $company): ?BankAccount
86
+    {
87
+        return $company->bankAccounts()->where('enabled', true)->first();
88
+    }
84 89
 }

+ 15
- 90
app/Services/CompanyDefaultService.php 查看文件

@@ -3,12 +3,7 @@
3 3
 namespace App\Services;
4 4
 
5 5
 use App\Models\Company;
6
-use App\Models\Setting\Appearance;
7
-use App\Models\Setting\Currency;
8
-use App\Models\Setting\Discount;
9
-use App\Models\Setting\DocumentDefault;
10
-use App\Models\Setting\Localization;
11
-use App\Models\Setting\Tax;
6
+use App\Models\Setting\CompanyDefault;
12 7
 use App\Models\User;
13 8
 use Illuminate\Support\Facades\DB;
14 9
 
@@ -16,93 +11,23 @@ class CompanyDefaultService
16 11
 {
17 12
     public function createCompanyDefaults(Company $company, User $user, string $currencyCode, string $countryCode, string $language): void
18 13
     {
19
-        DB::transaction(function () use ($company, $user, $currencyCode, $countryCode, $language) {
20
-            $this->createCurrency($company, $user, $currencyCode);
21
-            $this->createSalesTax($company, $user);
22
-            $this->createPurchaseTax($company, $user);
23
-            $this->createSalesDiscount($company, $user);
24
-            $this->createPurchaseDiscount($company, $user);
25
-            $this->createAppearance($company, $user);
26
-            $this->createDocumentDefaults($company, $user);
27
-            $this->createLocalization($company, $user, $countryCode, $language);
28
-        }, 5);
29
-    }
30
-
31
-    private function createCurrency(Company $company, User $user, string $currencyCode): void
32
-    {
33
-        Currency::factory()->forCurrency($currencyCode)->create([
34
-            'company_id' => $company->id,
35
-            'created_by' => $user->id,
36
-            'updated_by' => $user->id,
37
-        ]);
38
-    }
14
+        DB::transaction(function () use ($user, $company, $currencyCode, $countryCode, $language) {
15
+            // Create the company defaults
16
+            $companyDefaultFactory = CompanyDefault::factory()->withDefault($user, $company, $currencyCode, $countryCode, $language);
17
+            $companyDefaults = $companyDefaultFactory->make()->toArray();
39 18
 
40
-    private function createSalesTax(Company $company, User $user): void
41
-    {
42
-        Tax::factory()->salesTax()->create([
43
-            'company_id' => $company->id,
44
-            'created_by' => $user->id,
45
-            'updated_by' => $user->id,
46
-        ]);
47
-    }
19
+            $companyDefault = CompanyDefault::create($companyDefaults);
48 20
 
49
-    private function createPurchaseTax(Company $company, User $user): void
50
-    {
51
-        Tax::factory()->purchaseTax()->create([
52
-            'company_id' => $company->id,
53
-            'created_by' => $user->id,
54
-            'updated_by' => $user->id,
55
-        ]);
56
-    }
21
+            // Create Chart of Accounts
22
+            $chartOfAccountsService = app()->make(ChartOfAccountsService::class);
23
+            $chartOfAccountsService->createChartOfAccounts($company);
57 24
 
58
-    private function createSalesDiscount(Company $company, User $user): void
59
-    {
60
-        Discount::factory()->salesDiscount()->create([
61
-            'company_id' => $company->id,
62
-            'created_by' => $user->id,
63
-            'updated_by' => $user->id,
64
-        ]);
65
-    }
25
+            // Get the default bank account and update the company default record
26
+            $defaultBankAccount = $chartOfAccountsService->getDefaultBankAccount($company);
66 27
 
67
-    private function createPurchaseDiscount(Company $company, User $user): void
68
-    {
69
-        Discount::factory()->purchaseDiscount()->create([
70
-            'company_id' => $company->id,
71
-            'created_by' => $user->id,
72
-            'updated_by' => $user->id,
73
-        ]);
74
-    }
75
-
76
-    private function createAppearance(Company $company, User $user): void
77
-    {
78
-        Appearance::factory()->create([
79
-            'company_id' => $company->id,
80
-            'created_by' => $user->id,
81
-            'updated_by' => $user->id,
82
-        ]);
83
-    }
84
-
85
-    private function createDocumentDefaults(Company $company, User $user): void
86
-    {
87
-        DocumentDefault::factory()->invoice()->create([
88
-            'company_id' => $company->id,
89
-            'created_by' => $user->id,
90
-            'updated_by' => $user->id,
91
-        ]);
92
-
93
-        DocumentDefault::factory()->bill()->create([
94
-            'company_id' => $company->id,
95
-            'created_by' => $user->id,
96
-            'updated_by' => $user->id,
97
-        ]);
98
-    }
99
-
100
-    private function createLocalization(Company $company, User $user, string $countryCode, string $language): void
101
-    {
102
-        Localization::factory()->withCountry($countryCode, $language)->create([
103
-            'company_id' => $company->id,
104
-            'created_by' => $user->id,
105
-            'updated_by' => $user->id,
106
-        ]);
28
+            $companyDefault->update([
29
+                'bank_account_id' => $defaultBankAccount?->id,
30
+            ]);
31
+        }, 5);
107 32
     }
108 33
 }

+ 199
- 199
composer.lock
文件差异内容过多而无法显示
查看文件


+ 1
- 0
config/snappy.php 查看文件

@@ -48,6 +48,7 @@ return [
48 48
             'footer-right' => 'Page [page] / [toPage]',
49 49
             'footer-font-size' => '8',
50 50
             'footer-spacing' => '5',
51
+            'zoom' => '1.3',
51 52
         ],
52 53
         'env' => [],
53 54
     ],

+ 8
- 10
database/factories/Accounting/TransactionFactory.php 查看文件

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace Database\Factories\Accounting;
4 4
 
5
+use App\Enums\Accounting\JournalEntryType;
6
+use App\Enums\Accounting\TransactionType;
5 7
 use App\Models\Accounting\Account;
6 8
 use App\Models\Accounting\Transaction;
7 9
 use App\Models\Banking\BankAccount;
@@ -29,13 +31,10 @@ class TransactionFactory extends Factory
29 31
             'company_id' => 1,
30 32
             'bank_account_id' => 1,
31 33
             'account_id' => $this->faker->numberBetween(2, 30),
32
-            'type' => $this->faker->randomElement(['deposit', 'withdrawal', 'journal']),
33
-            'payment_channel' => $this->faker->randomElement(['online', 'in store', 'other']),
34
+            'type' => $this->faker->randomElement([TransactionType::Deposit, TransactionType::Withdrawal]),
34 35
             'description' => $this->faker->sentence,
35 36
             'notes' => $this->faker->paragraph,
36
-            'reference' => $this->faker->word,
37 37
             'amount' => $this->faker->numberBetween(100, 5000),
38
-            'pending' => $this->faker->boolean,
39 38
             'reviewed' => $this->faker->boolean,
40 39
             'posted_at' => $this->faker->dateTimeBetween('-2 years'),
41 40
             'created_by' => 1,
@@ -59,7 +58,7 @@ class TransactionFactory extends Factory
59 58
             $debitAccount->journalEntries()->create([
60 59
                 'company_id' => $transaction->company_id,
61 60
                 'transaction_id' => $transaction->id,
62
-                'type' => 'debit',
61
+                'type' => JournalEntryType::Debit,
63 62
                 'amount' => $transaction->amount,
64 63
                 'description' => $transaction->description,
65 64
                 'created_by' => $transaction->created_by,
@@ -69,7 +68,7 @@ class TransactionFactory extends Factory
69 68
             $creditAccount->journalEntries()->create([
70 69
                 'company_id' => $transaction->company_id,
71 70
                 'transaction_id' => $transaction->id,
72
-                'type' => 'credit',
71
+                'type' => JournalEntryType::Credit,
73 72
                 'amount' => $transaction->amount,
74 73
                 'description' => $transaction->description,
75 74
                 'created_by' => $transaction->created_by,
@@ -81,12 +80,11 @@ class TransactionFactory extends Factory
81 80
     public function forCompanyAndBankAccount(Company $company, BankAccount $bankAccount): static
82 81
     {
83 82
         return $this->state(function (array $attributes) use ($bankAccount, $company) {
84
-            $type = $this->faker->randomElement(['deposit', 'withdrawal', 'journal']);
83
+            $type = $this->faker->randomElement([TransactionType::Deposit, TransactionType::Withdrawal]);
85 84
 
86 85
             $associatedAccountTypes = match ($type) {
87
-                'deposit' => ['asset', 'liability', 'equity', 'revenue'],
88
-                'withdrawal' => ['asset', 'liability', 'equity', 'expense'],
89
-                default => ['asset', 'liability', 'equity', 'revenue', 'expense'],
86
+                TransactionType::Deposit => ['asset', 'liability', 'equity', 'revenue'],
87
+                TransactionType::Withdrawal => ['asset', 'liability', 'equity', 'expense'],
90 88
             };
91 89
 
92 90
             $accountIdForBankAccount = $bankAccount->account->id;

+ 8
- 7
database/factories/Setting/CompanyDefaultFactory.php 查看文件

@@ -37,12 +37,13 @@ class CompanyDefaultFactory extends Factory
37 37
         ];
38 38
     }
39 39
 
40
-    public function withDefault(User $user, Company $company, string $country, string $language = 'en'): static
40
+    public function withDefault(User $user, Company $company, ?string $currencyCode, string $countryCode, string $language = 'en'): static
41 41
     {
42
-        /** @var CurrencyCode $currencyFaker */
43
-        $currencyFaker = $this->faker;
44
-
45
-        $currencyCode = $currencyFaker->currencyCode($country);
42
+        if ($currencyCode === null) {
43
+            /** @var CurrencyCode $currencyFaker */
44
+            $currencyFaker = $this->faker;
45
+            $currencyCode = $currencyFaker->currencyCode($countryCode);
46
+        }
46 47
 
47 48
         $currency = $this->createCurrency($company, $user, $currencyCode);
48 49
         $salesTax = $this->createSalesTax($company, $user);
@@ -51,7 +52,7 @@ class CompanyDefaultFactory extends Factory
51 52
         $purchaseDiscount = $this->createPurchaseDiscount($company, $user);
52 53
         $this->createAppearance($company, $user);
53 54
         $this->createDocumentDefaults($company, $user);
54
-        $this->createLocalization($company, $user, $country, $language);
55
+        $this->createLocalization($company, $user, $countryCode, $language);
55 56
 
56 57
         $companyDefaults = [
57 58
             'company_id' => $company->id,
@@ -67,7 +68,7 @@ class CompanyDefaultFactory extends Factory
67 68
         return $this->state($companyDefaults);
68 69
     }
69 70
 
70
-    private function createCurrency(Company $company, User $user, string $currencyCode)
71
+    private function createCurrency(Company $company, User $user, string $currencyCode): Currency
71 72
     {
72 73
         return Currency::factory()->forCurrency($currencyCode)->create([
73 74
             'company_id' => $company->id,

+ 1
- 21
database/factories/UserFactory.php 查看文件

@@ -5,7 +5,6 @@ namespace Database\Factories;
5 5
 use App\Models\Company;
6 6
 use App\Models\Setting\CompanyProfile;
7 7
 use App\Models\User;
8
-use App\Services\ChartOfAccountsService;
9 8
 use App\Services\CompanyDefaultService;
10 9
 use Database\Factories\Accounting\TransactionFactory;
11 10
 use Illuminate\Database\Eloquent\Factories\Factory;
@@ -75,26 +74,7 @@ class UserFactory extends Factory
75 74
                         $companyDefaultService = app()->make(CompanyDefaultService::class);
76 75
                         $companyDefaultService->createCompanyDefaults($company, $user, 'USD', $countryCode, 'en');
77 76
 
78
-                        $chartOfAccountsService = app()->make(ChartOfAccountsService::class);
79
-                        $chartOfAccountsService->createChartOfAccounts($company);
80
-
81
-                        $defaultBankAccount = $company->bankAccounts()->where('enabled', true)->first();
82
-                        $defaultCurrency = $company->currencies()->where('enabled', true)->first();
83
-                        $defaultSalesTax = $company->taxes()->where('type', 'sales')->where('enabled', true)->first();
84
-                        $defaultPurchaseTax = $company->taxes()->where('type', 'purchase')->where('enabled', true)->first();
85
-                        $defaultSalesDiscount = $company->discounts()->where('type', 'sales')->where('enabled', true)->first();
86
-                        $defaultPurchaseDiscount = $company->discounts()->where('type', 'purchase')->where('enabled', true)->first();
87
-
88
-                        $company->default()->create([
89
-                            'bank_account_id' => $defaultBankAccount?->id,
90
-                            'currency_code' => $defaultCurrency?->code,
91
-                            'sales_tax_id' => $defaultSalesTax?->id,
92
-                            'purchase_tax_id' => $defaultPurchaseTax?->id,
93
-                            'sales_discount_id' => $defaultSalesDiscount?->id,
94
-                            'purchase_discount_id' => $defaultPurchaseDiscount?->id,
95
-                            'created_by' => $user->id,
96
-                            'updated_by' => $user->id,
97
-                        ]);
77
+                        $defaultBankAccount = $company->default->bankAccount;
98 78
 
99 79
                         TransactionFactory::new()
100 80
                             ->forCompanyAndBankAccount($company, $defaultBankAccount)

+ 119
- 128
package-lock.json 查看文件

@@ -446,9 +446,9 @@
446 446
             }
447 447
         },
448 448
         "node_modules/@jridgewell/sourcemap-codec": {
449
-            "version": "1.4.15",
450
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
451
-            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
449
+            "version": "1.5.0",
450
+            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
451
+            "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
452 452
             "dev": true
453 453
         },
454 454
         "node_modules/@jridgewell/trace-mapping": {
@@ -507,9 +507,9 @@
507 507
             }
508 508
         },
509 509
         "node_modules/@rollup/rollup-android-arm-eabi": {
510
-            "version": "4.18.0",
511
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
512
-            "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
510
+            "version": "4.18.1",
511
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz",
512
+            "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==",
513 513
             "cpu": [
514 514
                 "arm"
515 515
             ],
@@ -520,9 +520,9 @@
520 520
             ]
521 521
         },
522 522
         "node_modules/@rollup/rollup-android-arm64": {
523
-            "version": "4.18.0",
524
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
525
-            "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
523
+            "version": "4.18.1",
524
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz",
525
+            "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==",
526 526
             "cpu": [
527 527
                 "arm64"
528 528
             ],
@@ -533,9 +533,9 @@
533 533
             ]
534 534
         },
535 535
         "node_modules/@rollup/rollup-darwin-arm64": {
536
-            "version": "4.18.0",
537
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
538
-            "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
536
+            "version": "4.18.1",
537
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz",
538
+            "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==",
539 539
             "cpu": [
540 540
                 "arm64"
541 541
             ],
@@ -546,9 +546,9 @@
546 546
             ]
547 547
         },
548 548
         "node_modules/@rollup/rollup-darwin-x64": {
549
-            "version": "4.18.0",
550
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
551
-            "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
549
+            "version": "4.18.1",
550
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz",
551
+            "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==",
552 552
             "cpu": [
553 553
                 "x64"
554 554
             ],
@@ -559,9 +559,9 @@
559 559
             ]
560 560
         },
561 561
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
562
-            "version": "4.18.0",
563
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
564
-            "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
562
+            "version": "4.18.1",
563
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz",
564
+            "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==",
565 565
             "cpu": [
566 566
                 "arm"
567 567
             ],
@@ -572,9 +572,9 @@
572 572
             ]
573 573
         },
574 574
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
575
-            "version": "4.18.0",
576
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
577
-            "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
575
+            "version": "4.18.1",
576
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz",
577
+            "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==",
578 578
             "cpu": [
579 579
                 "arm"
580 580
             ],
@@ -585,9 +585,9 @@
585 585
             ]
586 586
         },
587 587
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
588
-            "version": "4.18.0",
589
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
590
-            "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
588
+            "version": "4.18.1",
589
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz",
590
+            "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==",
591 591
             "cpu": [
592 592
                 "arm64"
593 593
             ],
@@ -598,9 +598,9 @@
598 598
             ]
599 599
         },
600 600
         "node_modules/@rollup/rollup-linux-arm64-musl": {
601
-            "version": "4.18.0",
602
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
603
-            "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
601
+            "version": "4.18.1",
602
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz",
603
+            "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==",
604 604
             "cpu": [
605 605
                 "arm64"
606 606
             ],
@@ -611,9 +611,9 @@
611 611
             ]
612 612
         },
613 613
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
614
-            "version": "4.18.0",
615
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
616
-            "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
614
+            "version": "4.18.1",
615
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz",
616
+            "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==",
617 617
             "cpu": [
618 618
                 "ppc64"
619 619
             ],
@@ -624,9 +624,9 @@
624 624
             ]
625 625
         },
626 626
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
627
-            "version": "4.18.0",
628
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
629
-            "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
627
+            "version": "4.18.1",
628
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz",
629
+            "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==",
630 630
             "cpu": [
631 631
                 "riscv64"
632 632
             ],
@@ -637,9 +637,9 @@
637 637
             ]
638 638
         },
639 639
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
640
-            "version": "4.18.0",
641
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
642
-            "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
640
+            "version": "4.18.1",
641
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz",
642
+            "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==",
643 643
             "cpu": [
644 644
                 "s390x"
645 645
             ],
@@ -650,9 +650,9 @@
650 650
             ]
651 651
         },
652 652
         "node_modules/@rollup/rollup-linux-x64-gnu": {
653
-            "version": "4.18.0",
654
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
655
-            "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
653
+            "version": "4.18.1",
654
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz",
655
+            "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==",
656 656
             "cpu": [
657 657
                 "x64"
658 658
             ],
@@ -663,9 +663,9 @@
663 663
             ]
664 664
         },
665 665
         "node_modules/@rollup/rollup-linux-x64-musl": {
666
-            "version": "4.18.0",
667
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
668
-            "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
666
+            "version": "4.18.1",
667
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz",
668
+            "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==",
669 669
             "cpu": [
670 670
                 "x64"
671 671
             ],
@@ -676,9 +676,9 @@
676 676
             ]
677 677
         },
678 678
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
679
-            "version": "4.18.0",
680
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
681
-            "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
679
+            "version": "4.18.1",
680
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz",
681
+            "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==",
682 682
             "cpu": [
683 683
                 "arm64"
684 684
             ],
@@ -689,9 +689,9 @@
689 689
             ]
690 690
         },
691 691
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
692
-            "version": "4.18.0",
693
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
694
-            "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
692
+            "version": "4.18.1",
693
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz",
694
+            "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==",
695 695
             "cpu": [
696 696
                 "ia32"
697 697
             ],
@@ -702,9 +702,9 @@
702 702
             ]
703 703
         },
704 704
         "node_modules/@rollup/rollup-win32-x64-msvc": {
705
-            "version": "4.18.0",
706
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
707
-            "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
705
+            "version": "4.18.1",
706
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz",
707
+            "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==",
708 708
             "cpu": [
709 709
                 "x64"
710 710
             ],
@@ -890,9 +890,9 @@
890 890
             }
891 891
         },
892 892
         "node_modules/browserslist": {
893
-            "version": "4.23.1",
894
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
895
-            "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
893
+            "version": "4.23.2",
894
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
895
+            "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
896 896
             "dev": true,
897 897
             "funding": [
898 898
                 {
@@ -909,10 +909,10 @@
909 909
                 }
910 910
             ],
911 911
             "dependencies": {
912
-                "caniuse-lite": "^1.0.30001629",
913
-                "electron-to-chromium": "^1.4.796",
912
+                "caniuse-lite": "^1.0.30001640",
913
+                "electron-to-chromium": "^1.4.820",
914 914
                 "node-releases": "^2.0.14",
915
-                "update-browserslist-db": "^1.0.16"
915
+                "update-browserslist-db": "^1.1.0"
916 916
             },
917 917
             "bin": {
918 918
                 "browserslist": "cli.js"
@@ -931,9 +931,9 @@
931 931
             }
932 932
         },
933 933
         "node_modules/caniuse-lite": {
934
-            "version": "1.0.30001640",
935
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz",
936
-            "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==",
934
+            "version": "1.0.30001642",
935
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz",
936
+            "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==",
937 937
             "dev": true,
938 938
             "funding": [
939 939
                 {
@@ -1079,9 +1079,9 @@
1079 1079
             "dev": true
1080 1080
         },
1081 1081
         "node_modules/electron-to-chromium": {
1082
-            "version": "1.4.817",
1083
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.817.tgz",
1084
-            "integrity": "sha512-3znu+lZMIbTe8ZOs360OMJvVroVF2NpNI8T5jfLnDetVvj0uNmIucZzQVYMSJfsu9f47Ssox1Gt46PR+R+1JUg==",
1082
+            "version": "1.4.829",
1083
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.829.tgz",
1084
+            "integrity": "sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==",
1085 1085
             "dev": true
1086 1086
         },
1087 1087
         "node_modules/emoji-regex": {
@@ -1273,9 +1273,9 @@
1273 1273
             }
1274 1274
         },
1275 1275
         "node_modules/glob": {
1276
-            "version": "10.4.2",
1277
-            "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
1278
-            "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
1276
+            "version": "10.4.5",
1277
+            "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1278
+            "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1279 1279
             "dev": true,
1280 1280
             "dependencies": {
1281 1281
                 "foreground-child": "^3.1.0",
@@ -1288,9 +1288,6 @@
1288 1288
             "bin": {
1289 1289
                 "glob": "dist/esm/bin.mjs"
1290 1290
             },
1291
-            "engines": {
1292
-                "node": ">=16 || 14 >=14.18"
1293
-            },
1294 1291
             "funding": {
1295 1292
                 "url": "https://github.com/sponsors/isaacs"
1296 1293
             }
@@ -1332,9 +1329,9 @@
1332 1329
             }
1333 1330
         },
1334 1331
         "node_modules/is-core-module": {
1335
-            "version": "2.14.0",
1336
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
1337
-            "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
1332
+            "version": "2.15.0",
1333
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
1334
+            "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
1338 1335
             "dev": true,
1339 1336
             "dependencies": {
1340 1337
                 "hasown": "^2.0.2"
@@ -1392,16 +1389,13 @@
1392 1389
             "dev": true
1393 1390
         },
1394 1391
         "node_modules/jackspeak": {
1395
-            "version": "3.4.0",
1396
-            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
1397
-            "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
1392
+            "version": "3.4.3",
1393
+            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
1394
+            "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
1398 1395
             "dev": true,
1399 1396
             "dependencies": {
1400 1397
                 "@isaacs/cliui": "^8.0.2"
1401 1398
             },
1402
-            "engines": {
1403
-                "node": ">=14"
1404
-            },
1405 1399
             "funding": {
1406 1400
                 "url": "https://github.com/sponsors/isaacs"
1407 1401
             },
@@ -1419,9 +1413,9 @@
1419 1413
             }
1420 1414
         },
1421 1415
         "node_modules/laravel-vite-plugin": {
1422
-            "version": "1.0.4",
1423
-            "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.4.tgz",
1424
-            "integrity": "sha512-dEj8Q/Fsn0kKbOQ55bl/NmyJL+dD6OxnVaM/nNByw5XV4b00ky6FzXKVuHLDr4BvSJKH1y6oaOcEG5wKpCZ5+A==",
1416
+            "version": "1.0.5",
1417
+            "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.5.tgz",
1418
+            "integrity": "sha512-Zv+to82YLBknDCZ6g3iwOv9wZ7f6EWStb9pjSm7MGe9Mfoy5ynT2ssZbGsMr1udU6rDg9HOoYEVGw5Qf+p9zbw==",
1425 1419
             "dev": true,
1426 1420
             "dependencies": {
1427 1421
                 "picocolors": "^1.0.0",
@@ -1471,13 +1465,10 @@
1471 1465
             "dev": true
1472 1466
         },
1473 1467
         "node_modules/lru-cache": {
1474
-            "version": "10.3.0",
1475
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
1476
-            "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
1477
-            "dev": true,
1478
-            "engines": {
1479
-                "node": "14 || >=16.14"
1480
-            }
1468
+            "version": "10.4.3",
1469
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
1470
+            "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
1471
+            "dev": true
1481 1472
         },
1482 1473
         "node_modules/merge2": {
1483 1474
             "version": "1.4.1",
@@ -1585,9 +1576,9 @@
1585 1576
             }
1586 1577
         },
1587 1578
         "node_modules/node-releases": {
1588
-            "version": "2.0.14",
1589
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
1590
-            "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
1579
+            "version": "2.0.17",
1580
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz",
1581
+            "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==",
1591 1582
             "dev": true
1592 1583
         },
1593 1584
         "node_modules/normalize-path": {
@@ -1830,9 +1821,9 @@
1830 1821
             }
1831 1822
         },
1832 1823
         "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
1833
-            "version": "6.1.0",
1834
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
1835
-            "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
1824
+            "version": "6.1.1",
1825
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
1826
+            "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
1836 1827
             "dev": true,
1837 1828
             "dependencies": {
1838 1829
                 "cssesc": "^3.0.0",
@@ -1914,9 +1905,9 @@
1914 1905
             }
1915 1906
         },
1916 1907
         "node_modules/postcss-nesting/node_modules/postcss-selector-parser": {
1917
-            "version": "6.1.0",
1918
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
1919
-            "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
1908
+            "version": "6.1.1",
1909
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
1910
+            "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
1920 1911
             "dev": true,
1921 1912
             "dependencies": {
1922 1913
                 "cssesc": "^3.0.0",
@@ -2020,9 +2011,9 @@
2020 2011
             }
2021 2012
         },
2022 2013
         "node_modules/rollup": {
2023
-            "version": "4.18.0",
2024
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
2025
-            "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
2014
+            "version": "4.18.1",
2015
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz",
2016
+            "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==",
2026 2017
             "dev": true,
2027 2018
             "dependencies": {
2028 2019
                 "@types/estree": "1.0.5"
@@ -2035,22 +2026,22 @@
2035 2026
                 "npm": ">=8.0.0"
2036 2027
             },
2037 2028
             "optionalDependencies": {
2038
-                "@rollup/rollup-android-arm-eabi": "4.18.0",
2039
-                "@rollup/rollup-android-arm64": "4.18.0",
2040
-                "@rollup/rollup-darwin-arm64": "4.18.0",
2041
-                "@rollup/rollup-darwin-x64": "4.18.0",
2042
-                "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
2043
-                "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
2044
-                "@rollup/rollup-linux-arm64-gnu": "4.18.0",
2045
-                "@rollup/rollup-linux-arm64-musl": "4.18.0",
2046
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
2047
-                "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
2048
-                "@rollup/rollup-linux-s390x-gnu": "4.18.0",
2049
-                "@rollup/rollup-linux-x64-gnu": "4.18.0",
2050
-                "@rollup/rollup-linux-x64-musl": "4.18.0",
2051
-                "@rollup/rollup-win32-arm64-msvc": "4.18.0",
2052
-                "@rollup/rollup-win32-ia32-msvc": "4.18.0",
2053
-                "@rollup/rollup-win32-x64-msvc": "4.18.0",
2029
+                "@rollup/rollup-android-arm-eabi": "4.18.1",
2030
+                "@rollup/rollup-android-arm64": "4.18.1",
2031
+                "@rollup/rollup-darwin-arm64": "4.18.1",
2032
+                "@rollup/rollup-darwin-x64": "4.18.1",
2033
+                "@rollup/rollup-linux-arm-gnueabihf": "4.18.1",
2034
+                "@rollup/rollup-linux-arm-musleabihf": "4.18.1",
2035
+                "@rollup/rollup-linux-arm64-gnu": "4.18.1",
2036
+                "@rollup/rollup-linux-arm64-musl": "4.18.1",
2037
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1",
2038
+                "@rollup/rollup-linux-riscv64-gnu": "4.18.1",
2039
+                "@rollup/rollup-linux-s390x-gnu": "4.18.1",
2040
+                "@rollup/rollup-linux-x64-gnu": "4.18.1",
2041
+                "@rollup/rollup-linux-x64-musl": "4.18.1",
2042
+                "@rollup/rollup-win32-arm64-msvc": "4.18.1",
2043
+                "@rollup/rollup-win32-ia32-msvc": "4.18.1",
2044
+                "@rollup/rollup-win32-x64-msvc": "4.18.1",
2054 2045
                 "fsevents": "~2.3.2"
2055 2046
             }
2056 2047
         },
@@ -2250,9 +2241,9 @@
2250 2241
             }
2251 2242
         },
2252 2243
         "node_modules/tailwindcss": {
2253
-            "version": "3.4.4",
2254
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz",
2255
-            "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==",
2244
+            "version": "3.4.6",
2245
+            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz",
2246
+            "integrity": "sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==",
2256 2247
             "dev": true,
2257 2248
             "dependencies": {
2258 2249
                 "@alloc/quick-lru": "^5.2.0",
@@ -2287,9 +2278,9 @@
2287 2278
             }
2288 2279
         },
2289 2280
         "node_modules/tailwindcss/node_modules/postcss-selector-parser": {
2290
-            "version": "6.1.0",
2291
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
2292
-            "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
2281
+            "version": "6.1.1",
2282
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
2283
+            "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
2293 2284
             "dev": true,
2294 2285
             "dependencies": {
2295 2286
                 "cssesc": "^3.0.0",
@@ -2375,9 +2366,9 @@
2375 2366
             "dev": true
2376 2367
         },
2377 2368
         "node_modules/vite": {
2378
-            "version": "5.3.3",
2379
-            "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
2380
-            "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
2369
+            "version": "5.3.4",
2370
+            "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz",
2371
+            "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==",
2381 2372
             "dev": true,
2382 2373
             "dependencies": {
2383 2374
                 "esbuild": "^0.21.3",
@@ -2430,9 +2421,9 @@
2430 2421
             }
2431 2422
         },
2432 2423
         "node_modules/vite-plugin-full-reload": {
2433
-            "version": "1.1.0",
2434
-            "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz",
2435
-            "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==",
2424
+            "version": "1.2.0",
2425
+            "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
2426
+            "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
2436 2427
             "dev": true,
2437 2428
             "dependencies": {
2438 2429
                 "picocolors": "^1.0.0",

+ 17
- 8
resources/views/filament/company/pages/reports/account-transactions.blade.php 查看文件

@@ -3,18 +3,27 @@
3 3
         <form wire:submit="loadReportData" class="p-6">
4 4
             {{ $this->form }}
5 5
         </form>
6
-        <div class="divide-y divide-gray-200 overflow-x-auto overflow-y-hidden dark:divide-white/10 dark:border-t-white/10">
7
-            <div wire:init="loadReportData" class="flex items-center justify-center">
8
-                <div wire:loading.delay wire:target="loadReportData">
6
+        <div class="relative divide-y divide-gray-200 overflow-x-auto dark:divide-white/10 dark:border-t-white/10 min-h-64">
7
+            <div wire:init="loadReportData" class="flex items-center justify-center w-full h-full absolute">
8
+                <div wire:loading wire:target="loadReportData">
9 9
                     <x-filament::loading-indicator class="p-6 text-primary-700 dark:text-primary-300" />
10 10
                 </div>
11 11
             </div>
12 12
 
13
-            <div wire:loading.remove wire:target="loadReportData">
14
-                @if($this->report)
15
-                    <x-company.tables.reports.account-transactions :report="$this->report" />
16
-                @endif
17
-            </div>
13
+            @if($this->reportLoaded)
14
+                <div wire:loading.remove wire:target="loadReportData">
15
+                    @if($this->report && !$this->tableHasEmptyState())
16
+                        <x-company.tables.reports.account-transactions :report="$this->report" />
17
+                    @else
18
+                        <x-filament-tables::empty-state
19
+                            :actions="$this->getEmptyStateActions()"
20
+                            :description="$this->getEmptyStateDescription()"
21
+                            :heading="$this->getEmptyStateHeading()"
22
+                            :icon="$this->getEmptyStateIcon()"
23
+                        />
24
+                    @endif
25
+                </div>
26
+            @endif
18 27
         </div>
19 28
         <div class="es-table__footer-ctn border-t border-gray-200"></div>
20 29
     </x-filament-tables::container>

+ 24
- 24
resources/views/filament/company/pages/reports/detailed-report.blade.php 查看文件

@@ -1,33 +1,33 @@
1 1
 <x-filament-panels::page>
2 2
     <x-filament-tables::container>
3
-        <div class="p-6 divide-y divide-gray-200 dark:divide-white/5">
4
-            <form wire:submit="loadReportData">
5
-                <div class="flex flex-col md:flex-row items-start md:items-center justify-center gap-4 md:gap-12">
6
-                    {{ $this->form }}
7
-                    @if($this->hasToggleableColumns())
8
-                        <x-filament-tables::column-toggle.dropdown
9
-                            :form="$this->toggleTableColumnForm"
10
-                            :trigger-action="$this->toggleColumnsAction"
11
-                        />
12
-                    @endif
13
-                    <x-filament::button type="submit" wire:target="loadReportData" class="flex-shrink-0">
14
-                        Update Report
15
-                    </x-filament::button>
16
-                </div>
17
-            </form>
18
-        </div>
19
-        <div class="divide-y divide-gray-200 overflow-x-auto overflow-y-hidden dark:divide-white/10 dark:border-t-white/10">
20
-            <div wire:init="loadReportData" class="flex items-center justify-center">
21
-                <div wire:loading.delay wire:target="loadReportData">
3
+        <form wire:submit="loadReportData" class="p-6">
4
+            <div class="flex flex-col md:flex-row items-start md:items-center justify-center gap-4 md:gap-12">
5
+                {{ $this->form }}
6
+                @if($this->hasToggleableColumns())
7
+                    <x-filament-tables::column-toggle.dropdown
8
+                        :form="$this->toggleTableColumnForm"
9
+                        :trigger-action="$this->toggleColumnsAction"
10
+                    />
11
+                @endif
12
+                <x-filament::button type="submit" wire:target="loadReportData" class="flex-shrink-0">
13
+                    Update Report
14
+                </x-filament::button>
15
+            </div>
16
+        </form>
17
+        <div class="relative divide-y divide-gray-200 overflow-x-auto dark:divide-white/10 dark:border-t-white/10 min-h-64">
18
+            <div wire:init="loadReportData" class="flex items-center justify-center w-full h-full absolute">
19
+                <div wire:loading wire:target="loadReportData">
22 20
                     <x-filament::loading-indicator class="p-6 text-primary-700 dark:text-primary-300" />
23 21
                 </div>
24 22
             </div>
25 23
 
26
-            <div wire:loading.remove wire:target="loadReportData">
27
-                @if($this->report)
28
-                    <x-company.tables.reports.detailed-report :report="$this->report" />
29
-                @endif
30
-            </div>
24
+            @if($this->reportLoaded)
25
+                <div wire:loading.remove wire:target="loadReportData">
26
+                    @if($this->report)
27
+                        <x-company.tables.reports.detailed-report :report="$this->report" />
28
+                    @endif
29
+                </div>
30
+            @endif
31 31
         </div>
32 32
         <div class="es-table__footer-ctn border-t border-gray-200"></div>
33 33
     </x-filament-tables::container>

正在加载...
取消
保存