Browse Source

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

Development 3.x
3.x
Andrew Wallo 7 months ago
parent
commit
1bce88fc9f
No account linked to committer's email address
31 changed files with 531 additions and 866 deletions
  1. 2
    0
      app/Filament/Company/Resources/Purchases/BillResource.php
  2. 2
    0
      app/Filament/Company/Resources/Sales/EstimateResource.php
  3. 2
    0
      app/Filament/Company/Resources/Sales/InvoiceResource.php
  4. 2
    0
      app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php
  5. 0
    6
      app/Jobs/GenerateRecurringInvoices.php
  6. 0
    6
      app/Jobs/ProcessOverdueInvoices.php
  7. 1
    7
      app/Jobs/ProcessTransactionImport.php
  8. 1
    7
      app/Jobs/ProcessTransactionUpdate.php
  9. 2
    0
      app/Listeners/HandleTransactionImport.php
  10. 4
    5
      app/Models/Accounting/DocumentLineItem.php
  11. 7
    1
      app/Utilities/Currency/CurrencyConverter.php
  12. 87
    87
      composer.lock
  13. 4
    4
      config/queue.php
  14. 6
    6
      database/migrations/2024_11_13_220301_create_document_line_items_table.php
  15. 1
    1
      database/migrations/2024_11_14_230753_create_adjustments_table.php
  16. 7
    7
      database/migrations/2024_11_27_221657_create_bills_table.php
  17. 5
    5
      database/migrations/2024_11_27_223000_create_estimates_table.php
  18. 5
    5
      database/migrations/2024_11_27_223001_create_recurring_invoices_table.php
  19. 7
    7
      database/migrations/2024_11_27_223015_create_invoices_table.php
  20. 203
    203
      package-lock.json
  21. 1
    1
      resources/views/components/company/document-template/footer.blade.php
  22. 1
    1
      resources/views/components/company/document-template/header.blade.php
  23. 1
    1
      resources/views/components/company/document-template/line-items.blade.php
  24. 14
    12
      resources/views/components/icons/document-header-decoration.blade.php
  25. 43
    32
      resources/views/filament/company/components/document-templates/classic.blade.php
  26. 34
    25
      resources/views/filament/company/components/document-templates/default.blade.php
  27. 9
    9
      resources/views/filament/company/components/document-templates/modern.blade.php
  28. 39
    36
      resources/views/filament/infolists/components/document-templates/classic.blade.php
  29. 34
    27
      resources/views/filament/infolists/components/document-templates/default.blade.php
  30. 7
    7
      resources/views/filament/infolists/components/document-templates/modern.blade.php
  31. 0
    358
      resources/views/vendor/filament/components/modal/index.blade.php

+ 2
- 0
app/Filament/Company/Resources/Purchases/BillResource.php View File

@@ -164,12 +164,14 @@ class BillResource extends Resource
164 164
                                     ->required()
165 165
                                     ->numeric()
166 166
                                     ->live()
167
+                                    ->maxValue(9999999999.99)
167 168
                                     ->default(1),
168 169
                                 Forms\Components\TextInput::make('unit_price')
169 170
                                     ->label('Price')
170 171
                                     ->hiddenLabel()
171 172
                                     ->numeric()
172 173
                                     ->live()
174
+                                    ->maxValue(9999999999.99)
173 175
                                     ->default(0),
174 176
                                 Forms\Components\Select::make('purchaseTaxes')
175 177
                                     ->label('Taxes')

+ 2
- 0
app/Filament/Company/Resources/Sales/EstimateResource.php View File

@@ -169,11 +169,13 @@ class EstimateResource extends Resource
169 169
                                     ->required()
170 170
                                     ->numeric()
171 171
                                     ->live()
172
+                                    ->maxValue(9999999999.99)
172 173
                                     ->default(1),
173 174
                                 Forms\Components\TextInput::make('unit_price')
174 175
                                     ->hiddenLabel()
175 176
                                     ->numeric()
176 177
                                     ->live()
178
+                                    ->maxValue(9999999999.99)
177 179
                                     ->default(0),
178 180
                                 Forms\Components\Select::make('salesTaxes')
179 181
                                     ->relationship('salesTaxes', 'name')

+ 2
- 0
app/Filament/Company/Resources/Sales/InvoiceResource.php View File

@@ -183,11 +183,13 @@ class InvoiceResource extends Resource
183 183
                                     ->required()
184 184
                                     ->numeric()
185 185
                                     ->live()
186
+                                    ->maxValue(9999999999.99)
186 187
                                     ->default(1),
187 188
                                 Forms\Components\TextInput::make('unit_price')
188 189
                                     ->hiddenLabel()
189 190
                                     ->numeric()
190 191
                                     ->live()
192
+                                    ->maxValue(9999999999.99)
191 193
                                     ->default(0),
192 194
                                 Forms\Components\Select::make('salesTaxes')
193 195
                                     ->relationship('salesTaxes', 'name')

+ 2
- 0
app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php View File

@@ -153,11 +153,13 @@ class RecurringInvoiceResource extends Resource
153 153
                                     ->required()
154 154
                                     ->numeric()
155 155
                                     ->live()
156
+                                    ->maxValue(9999999999.99)
156 157
                                     ->default(1),
157 158
                                 Forms\Components\TextInput::make('unit_price')
158 159
                                     ->hiddenLabel()
159 160
                                     ->numeric()
160 161
                                     ->live()
162
+                                    ->maxValue(9999999999.99)
161 163
                                     ->default(0),
162 164
                                 Forms\Components\Select::make('salesTaxes')
163 165
                                     ->relationship('salesTaxes', 'name')

+ 0
- 6
app/Jobs/GenerateRecurringInvoices.php View File

@@ -5,17 +5,11 @@ namespace App\Jobs;
5 5
 use App\Enums\Accounting\RecurringInvoiceStatus;
6 6
 use App\Models\Accounting\RecurringInvoice;
7 7
 use Illuminate\Contracts\Queue\ShouldQueue;
8
-use Illuminate\Foundation\Bus\Dispatchable;
9 8
 use Illuminate\Foundation\Queue\Queueable;
10
-use Illuminate\Queue\InteractsWithQueue;
11
-use Illuminate\Queue\SerializesModels;
12 9
 
13 10
 class GenerateRecurringInvoices implements ShouldQueue
14 11
 {
15
-    use Dispatchable;
16
-    use InteractsWithQueue;
17 12
     use Queueable;
18
-    use SerializesModels;
19 13
 
20 14
     /**
21 15
      * Execute the job.

+ 0
- 6
app/Jobs/ProcessOverdueInvoices.php View File

@@ -5,17 +5,11 @@ namespace App\Jobs;
5 5
 use App\Enums\Accounting\InvoiceStatus;
6 6
 use App\Models\Accounting\Invoice;
7 7
 use Illuminate\Contracts\Queue\ShouldQueue;
8
-use Illuminate\Foundation\Bus\Dispatchable;
9 8
 use Illuminate\Foundation\Queue\Queueable;
10
-use Illuminate\Queue\InteractsWithQueue;
11
-use Illuminate\Queue\SerializesModels;
12 9
 
13 10
 class ProcessOverdueInvoices implements ShouldQueue
14 11
 {
15
-    use Dispatchable;
16
-    use InteractsWithQueue;
17 12
     use Queueable;
18
-    use SerializesModels;
19 13
 
20 14
     /**
21 15
      * Execute the job.

+ 1
- 7
app/Jobs/ProcessTransactionImport.php View File

@@ -8,19 +8,13 @@ use App\Models\Banking\ConnectedBankAccount;
8 8
 use App\Models\Company;
9 9
 use App\Services\PlaidService;
10 10
 use App\Services\TransactionService;
11
-use Illuminate\Bus\Queueable;
12 11
 use Illuminate\Contracts\Queue\ShouldQueue;
13
-use Illuminate\Foundation\Bus\Dispatchable;
14
-use Illuminate\Queue\InteractsWithQueue;
15
-use Illuminate\Queue\SerializesModels;
12
+use Illuminate\Foundation\Queue\Queueable;
16 13
 use Illuminate\Support\Carbon;
17 14
 
18 15
 class ProcessTransactionImport implements ShouldQueue
19 16
 {
20
-    use Dispatchable;
21
-    use InteractsWithQueue;
22 17
     use Queueable;
23
-    use SerializesModels;
24 18
 
25 19
     public function __construct(
26 20
         protected Company $company,

+ 1
- 7
app/Jobs/ProcessTransactionUpdate.php View File

@@ -6,19 +6,13 @@ use App\Models\Banking\ConnectedBankAccount;
6 6
 use App\Models\Company;
7 7
 use App\Services\PlaidService;
8 8
 use App\Services\TransactionService;
9
-use Illuminate\Bus\Queueable;
10 9
 use Illuminate\Contracts\Queue\ShouldQueue;
11
-use Illuminate\Foundation\Bus\Dispatchable;
12
-use Illuminate\Queue\InteractsWithQueue;
13
-use Illuminate\Queue\SerializesModels;
10
+use Illuminate\Foundation\Queue\Queueable;
14 11
 use Illuminate\Support\Carbon;
15 12
 
16 13
 class ProcessTransactionUpdate implements ShouldQueue
17 14
 {
18
-    use Dispatchable;
19
-    use InteractsWithQueue;
20 15
     use Queueable;
21
-    use SerializesModels;
22 16
 
23 17
     public function __construct(
24 18
         protected Company $company,

+ 2
- 0
app/Listeners/HandleTransactionImport.php View File

@@ -4,6 +4,7 @@ namespace App\Listeners;
4 4
 
5 5
 use App\Events\StartTransactionImport;
6 6
 use App\Jobs\ProcessTransactionImport;
7
+use App\Models\Accounting\Account;
7 8
 use Illuminate\Database\Eloquent\ModelNotFoundException;
8 9
 use Illuminate\Support\Facades\DB;
9 10
 
@@ -37,6 +38,7 @@ class HandleTransactionImport
37 38
                 throw new ModelNotFoundException("Account subtype '{$defaultAccountSubtypeName}' not found for company '{$company->name}'");
38 39
             }
39 40
 
41
+            /** @var Account $account */
40 42
             $account = $company->accounts()->create([
41 43
                 'name' => $connectedBankAccount->name,
42 44
                 'currency_code' => $connectedBankAccount->currency_code,

+ 4
- 5
app/Models/Accounting/DocumentLineItem.php View File

@@ -4,7 +4,6 @@ namespace App\Models\Accounting;
4 4
 
5 5
 use Akaunting\Money\Money;
6 6
 use App\Casts\DocumentMoneyCast;
7
-use App\Casts\MoneyCast;
8 7
 use App\Concerns\Blamable;
9 8
 use App\Concerns\CompanyOwned;
10 9
 use App\Enums\Accounting\AdjustmentCategory;
@@ -42,11 +41,11 @@ class DocumentLineItem extends Model
42 41
     ];
43 42
 
44 43
     protected $casts = [
45
-        'unit_price' => MoneyCast::class,
44
+        'unit_price' => DocumentMoneyCast::class,
46 45
         'subtotal' => DocumentMoneyCast::class,
47
-        'tax_total' => MoneyCast::class,
48
-        'discount_total' => MoneyCast::class,
49
-        'total' => MoneyCast::class,
46
+        'tax_total' => DocumentMoneyCast::class,
47
+        'discount_total' => DocumentMoneyCast::class,
48
+        'total' => DocumentMoneyCast::class,
50 49
     ];
51 50
 
52 51
     public function documentable(): MorphTo

+ 7
- 1
app/Utilities/Currency/CurrencyConverter.php View File

@@ -46,7 +46,13 @@ class CurrencyConverter
46 46
     {
47 47
         $currency ??= CurrencyAccessor::getDefaultCurrency();
48 48
 
49
-        return money($amount, $currency, true)->getAmount();
49
+        $amountInCents = money($amount, $currency, true)->getAmount();
50
+
51
+        if (is_float($amountInCents)) {
52
+            $amountInCents = (int) round($amountInCents);
53
+        }
54
+
55
+        return $amountInCents;
50 56
     }
51 57
 
52 58
     public static function formatCentsToMoney(int $amount, ?string $currency = null, bool $withCode = false): string

+ 87
- 87
composer.lock View File

@@ -497,16 +497,16 @@
497 497
         },
498 498
         {
499 499
             "name": "aws/aws-sdk-php",
500
-            "version": "3.342.0",
500
+            "version": "3.342.4",
501 501
             "source": {
502 502
                 "type": "git",
503 503
                 "url": "https://github.com/aws/aws-sdk-php.git",
504
-                "reference": "5b8c837ab0c9754ab3408bd9afe6f0c67516b1fd"
504
+                "reference": "65cc842b9998d415b05d635b6146d0728934ff4a"
505 505
             },
506 506
             "dist": {
507 507
                 "type": "zip",
508
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5b8c837ab0c9754ab3408bd9afe6f0c67516b1fd",
509
-                "reference": "5b8c837ab0c9754ab3408bd9afe6f0c67516b1fd",
508
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/65cc842b9998d415b05d635b6146d0728934ff4a",
509
+                "reference": "65cc842b9998d415b05d635b6146d0728934ff4a",
510 510
                 "shasum": ""
511 511
             },
512 512
             "require": {
@@ -588,9 +588,9 @@
588 588
             "support": {
589 589
                 "forum": "https://github.com/aws/aws-sdk-php/discussions",
590 590
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
591
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.342.0"
591
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.342.4"
592 592
             },
593
-            "time": "2025-03-05T19:20:14+00:00"
593
+            "time": "2025-03-11T18:27:07+00:00"
594 594
         },
595 595
         {
596 596
             "name": "aws/aws-sdk-php-laravel",
@@ -1282,16 +1282,16 @@
1282 1282
         },
1283 1283
         {
1284 1284
             "name": "doctrine/dbal",
1285
-            "version": "4.2.2",
1285
+            "version": "4.2.3",
1286 1286
             "source": {
1287 1287
                 "type": "git",
1288 1288
                 "url": "https://github.com/doctrine/dbal.git",
1289
-                "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec"
1289
+                "reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e"
1290 1290
             },
1291 1291
             "dist": {
1292 1292
                 "type": "zip",
1293
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/19a2b7deb5fe8c2df0ff817ecea305e50acb62ec",
1294
-                "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec",
1293
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/33d2d7fe1269b2301640c44cf2896ea607b30e3e",
1294
+                "reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e",
1295 1295
                 "shasum": ""
1296 1296
             },
1297 1297
             "require": {
@@ -1368,7 +1368,7 @@
1368 1368
             ],
1369 1369
             "support": {
1370 1370
                 "issues": "https://github.com/doctrine/dbal/issues",
1371
-                "source": "https://github.com/doctrine/dbal/tree/4.2.2"
1371
+                "source": "https://github.com/doctrine/dbal/tree/4.2.3"
1372 1372
             },
1373 1373
             "funding": [
1374 1374
                 {
@@ -1384,7 +1384,7 @@
1384 1384
                     "type": "tidelift"
1385 1385
                 }
1386 1386
             ],
1387
-            "time": "2025-01-16T08:40:56+00:00"
1387
+            "time": "2025-03-07T18:29:05+00:00"
1388 1388
         },
1389 1389
         {
1390 1390
             "name": "doctrine/deprecations",
@@ -1733,16 +1733,16 @@
1733 1733
         },
1734 1734
         {
1735 1735
             "name": "filament/actions",
1736
-            "version": "v3.3.3",
1736
+            "version": "v3.3.4",
1737 1737
             "source": {
1738 1738
                 "type": "git",
1739 1739
                 "url": "https://github.com/filamentphp/actions.git",
1740
-                "reference": "acaaa861bc01f72a73cb5faedcc3fecbbbf599c6"
1740
+                "reference": "dd738da99c8032986e7628b09f185d8f0db7850a"
1741 1741
             },
1742 1742
             "dist": {
1743 1743
                 "type": "zip",
1744
-                "url": "https://api.github.com/repos/filamentphp/actions/zipball/acaaa861bc01f72a73cb5faedcc3fecbbbf599c6",
1745
-                "reference": "acaaa861bc01f72a73cb5faedcc3fecbbbf599c6",
1744
+                "url": "https://api.github.com/repos/filamentphp/actions/zipball/dd738da99c8032986e7628b09f185d8f0db7850a",
1745
+                "reference": "dd738da99c8032986e7628b09f185d8f0db7850a",
1746 1746
                 "shasum": ""
1747 1747
             },
1748 1748
             "require": {
@@ -1782,20 +1782,20 @@
1782 1782
                 "issues": "https://github.com/filamentphp/filament/issues",
1783 1783
                 "source": "https://github.com/filamentphp/filament"
1784 1784
             },
1785
-            "time": "2025-02-25T08:19:06+00:00"
1785
+            "time": "2025-03-11T16:33:01+00:00"
1786 1786
         },
1787 1787
         {
1788 1788
             "name": "filament/filament",
1789
-            "version": "v3.3.3",
1789
+            "version": "v3.3.4",
1790 1790
             "source": {
1791 1791
                 "type": "git",
1792 1792
                 "url": "https://github.com/filamentphp/panels.git",
1793
-                "reference": "6ca7e497517a78413777ab74a0688a70337f6b4f"
1793
+                "reference": "ae0288f28054c88a9f36f666f4752660ce72cb08"
1794 1794
             },
1795 1795
             "dist": {
1796 1796
                 "type": "zip",
1797
-                "url": "https://api.github.com/repos/filamentphp/panels/zipball/6ca7e497517a78413777ab74a0688a70337f6b4f",
1798
-                "reference": "6ca7e497517a78413777ab74a0688a70337f6b4f",
1797
+                "url": "https://api.github.com/repos/filamentphp/panels/zipball/ae0288f28054c88a9f36f666f4752660ce72cb08",
1798
+                "reference": "ae0288f28054c88a9f36f666f4752660ce72cb08",
1799 1799
                 "shasum": ""
1800 1800
             },
1801 1801
             "require": {
@@ -1847,20 +1847,20 @@
1847 1847
                 "issues": "https://github.com/filamentphp/filament/issues",
1848 1848
                 "source": "https://github.com/filamentphp/filament"
1849 1849
             },
1850
-            "time": "2025-03-05T09:26:29+00:00"
1850
+            "time": "2025-03-11T16:33:11+00:00"
1851 1851
         },
1852 1852
         {
1853 1853
             "name": "filament/forms",
1854
-            "version": "v3.3.3",
1854
+            "version": "v3.3.4",
1855 1855
             "source": {
1856 1856
                 "type": "git",
1857 1857
                 "url": "https://github.com/filamentphp/forms.git",
1858
-                "reference": "420f6b2b30288c853024d189213e38f644dd6f6e"
1858
+                "reference": "647f03f3d7a15a9ce71e803926b2e89f88693e8e"
1859 1859
             },
1860 1860
             "dist": {
1861 1861
                 "type": "zip",
1862
-                "url": "https://api.github.com/repos/filamentphp/forms/zipball/420f6b2b30288c853024d189213e38f644dd6f6e",
1863
-                "reference": "420f6b2b30288c853024d189213e38f644dd6f6e",
1862
+                "url": "https://api.github.com/repos/filamentphp/forms/zipball/647f03f3d7a15a9ce71e803926b2e89f88693e8e",
1863
+                "reference": "647f03f3d7a15a9ce71e803926b2e89f88693e8e",
1864 1864
                 "shasum": ""
1865 1865
             },
1866 1866
             "require": {
@@ -1903,20 +1903,20 @@
1903 1903
                 "issues": "https://github.com/filamentphp/filament/issues",
1904 1904
                 "source": "https://github.com/filamentphp/filament"
1905 1905
             },
1906
-            "time": "2025-03-05T09:26:39+00:00"
1906
+            "time": "2025-03-11T16:33:00+00:00"
1907 1907
         },
1908 1908
         {
1909 1909
             "name": "filament/infolists",
1910
-            "version": "v3.3.3",
1910
+            "version": "v3.3.4",
1911 1911
             "source": {
1912 1912
                 "type": "git",
1913 1913
                 "url": "https://github.com/filamentphp/infolists.git",
1914
-                "reference": "3498bfd23670f94d9c2160d2a7382775dfc97430"
1914
+                "reference": "a1355ace7341e4e44d31dc30cfc6129bd61c7d8f"
1915 1915
             },
1916 1916
             "dist": {
1917 1917
                 "type": "zip",
1918
-                "url": "https://api.github.com/repos/filamentphp/infolists/zipball/3498bfd23670f94d9c2160d2a7382775dfc97430",
1919
-                "reference": "3498bfd23670f94d9c2160d2a7382775dfc97430",
1918
+                "url": "https://api.github.com/repos/filamentphp/infolists/zipball/a1355ace7341e4e44d31dc30cfc6129bd61c7d8f",
1919
+                "reference": "a1355ace7341e4e44d31dc30cfc6129bd61c7d8f",
1920 1920
                 "shasum": ""
1921 1921
             },
1922 1922
             "require": {
@@ -1954,20 +1954,20 @@
1954 1954
                 "issues": "https://github.com/filamentphp/filament/issues",
1955 1955
                 "source": "https://github.com/filamentphp/filament"
1956 1956
             },
1957
-            "time": "2025-03-03T08:11:43+00:00"
1957
+            "time": "2025-03-11T16:33:01+00:00"
1958 1958
         },
1959 1959
         {
1960 1960
             "name": "filament/notifications",
1961
-            "version": "v3.3.3",
1961
+            "version": "v3.3.4",
1962 1962
             "source": {
1963 1963
                 "type": "git",
1964 1964
                 "url": "https://github.com/filamentphp/notifications.git",
1965
-                "reference": "8cfe18e5d04ba72d777753ed632bbcf3408236a2"
1965
+                "reference": "25d37ce5c74fcd339490b1cf89c4a4d3db3eb87d"
1966 1966
             },
1967 1967
             "dist": {
1968 1968
                 "type": "zip",
1969
-                "url": "https://api.github.com/repos/filamentphp/notifications/zipball/8cfe18e5d04ba72d777753ed632bbcf3408236a2",
1970
-                "reference": "8cfe18e5d04ba72d777753ed632bbcf3408236a2",
1969
+                "url": "https://api.github.com/repos/filamentphp/notifications/zipball/25d37ce5c74fcd339490b1cf89c4a4d3db3eb87d",
1970
+                "reference": "25d37ce5c74fcd339490b1cf89c4a4d3db3eb87d",
1971 1971
                 "shasum": ""
1972 1972
             },
1973 1973
             "require": {
@@ -2006,11 +2006,11 @@
2006 2006
                 "issues": "https://github.com/filamentphp/filament/issues",
2007 2007
                 "source": "https://github.com/filamentphp/filament"
2008 2008
             },
2009
-            "time": "2025-02-25T08:18:58+00:00"
2009
+            "time": "2025-03-11T16:33:09+00:00"
2010 2010
         },
2011 2011
         {
2012 2012
             "name": "filament/support",
2013
-            "version": "v3.3.3",
2013
+            "version": "v3.3.4",
2014 2014
             "source": {
2015 2015
                 "type": "git",
2016 2016
                 "url": "https://github.com/filamentphp/support.git",
@@ -2069,16 +2069,16 @@
2069 2069
         },
2070 2070
         {
2071 2071
             "name": "filament/tables",
2072
-            "version": "v3.3.3",
2072
+            "version": "v3.3.4",
2073 2073
             "source": {
2074 2074
                 "type": "git",
2075 2075
                 "url": "https://github.com/filamentphp/tables.git",
2076
-                "reference": "5f2fbd8f0c6ffd19b2462269778ed96ce3c6fd35"
2076
+                "reference": "8f9bb6449c7ff74e234848f336161af5a64561c6"
2077 2077
             },
2078 2078
             "dist": {
2079 2079
                 "type": "zip",
2080
-                "url": "https://api.github.com/repos/filamentphp/tables/zipball/5f2fbd8f0c6ffd19b2462269778ed96ce3c6fd35",
2081
-                "reference": "5f2fbd8f0c6ffd19b2462269778ed96ce3c6fd35",
2080
+                "url": "https://api.github.com/repos/filamentphp/tables/zipball/8f9bb6449c7ff74e234848f336161af5a64561c6",
2081
+                "reference": "8f9bb6449c7ff74e234848f336161af5a64561c6",
2082 2082
                 "shasum": ""
2083 2083
             },
2084 2084
             "require": {
@@ -2117,20 +2117,20 @@
2117 2117
                 "issues": "https://github.com/filamentphp/filament/issues",
2118 2118
                 "source": "https://github.com/filamentphp/filament"
2119 2119
             },
2120
-            "time": "2025-03-03T09:07:30+00:00"
2120
+            "time": "2025-03-11T16:33:31+00:00"
2121 2121
         },
2122 2122
         {
2123 2123
             "name": "filament/widgets",
2124
-            "version": "v3.3.3",
2124
+            "version": "v3.3.4",
2125 2125
             "source": {
2126 2126
                 "type": "git",
2127 2127
                 "url": "https://github.com/filamentphp/widgets.git",
2128
-                "reference": "3bbd19044e19f93711f3690c441a3a0d35696aa1"
2128
+                "reference": "2d91f0d509b4ef497678b919e471e9099451bd21"
2129 2129
             },
2130 2130
             "dist": {
2131 2131
                 "type": "zip",
2132
-                "url": "https://api.github.com/repos/filamentphp/widgets/zipball/3bbd19044e19f93711f3690c441a3a0d35696aa1",
2133
-                "reference": "3bbd19044e19f93711f3690c441a3a0d35696aa1",
2132
+                "url": "https://api.github.com/repos/filamentphp/widgets/zipball/2d91f0d509b4ef497678b919e471e9099451bd21",
2133
+                "reference": "2d91f0d509b4ef497678b919e471e9099451bd21",
2134 2134
                 "shasum": ""
2135 2135
             },
2136 2136
             "require": {
@@ -2161,7 +2161,7 @@
2161 2161
                 "issues": "https://github.com/filamentphp/filament/issues",
2162 2162
                 "source": "https://github.com/filamentphp/filament"
2163 2163
             },
2164
-            "time": "2025-02-19T08:42:37+00:00"
2164
+            "time": "2025-03-11T16:33:32+00:00"
2165 2165
         },
2166 2166
         {
2167 2167
             "name": "firebase/php-jwt",
@@ -2921,16 +2921,16 @@
2921 2921
         },
2922 2922
         {
2923 2923
             "name": "kirschbaum-development/eloquent-power-joins",
2924
-            "version": "4.2.1",
2924
+            "version": "4.2.2",
2925 2925
             "source": {
2926 2926
                 "type": "git",
2927 2927
                 "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git",
2928
-                "reference": "84a24784d9abde8bafb1998a0841a6bc10fa6f8e"
2928
+                "reference": "a307fab78c291526fba754e6ac8a86f7bd58d45d"
2929 2929
             },
2930 2930
             "dist": {
2931 2931
                 "type": "zip",
2932
-                "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/84a24784d9abde8bafb1998a0841a6bc10fa6f8e",
2933
-                "reference": "84a24784d9abde8bafb1998a0841a6bc10fa6f8e",
2932
+                "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/a307fab78c291526fba754e6ac8a86f7bd58d45d",
2933
+                "reference": "a307fab78c291526fba754e6ac8a86f7bd58d45d",
2934 2934
                 "shasum": ""
2935 2935
             },
2936 2936
             "require": {
@@ -2978,9 +2978,9 @@
2978 2978
             ],
2979 2979
             "support": {
2980 2980
                 "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues",
2981
-                "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.1"
2981
+                "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.2"
2982 2982
             },
2983
-            "time": "2025-03-05T10:11:33+00:00"
2983
+            "time": "2025-03-08T01:26:00+00:00"
2984 2984
         },
2985 2985
         {
2986 2986
             "name": "knplabs/knp-snappy",
@@ -5141,16 +5141,16 @@
5141 5141
         },
5142 5142
         {
5143 5143
             "name": "openspout/openspout",
5144
-            "version": "v4.28.5",
5144
+            "version": "v4.29.1",
5145 5145
             "source": {
5146 5146
                 "type": "git",
5147 5147
                 "url": "https://github.com/openspout/openspout.git",
5148
-                "reference": "ab05a09fe6fce57c90338f83280648a9786ce36b"
5148
+                "reference": "ec83106bc3922fe94c9d37976ba6b7259511c4c5"
5149 5149
             },
5150 5150
             "dist": {
5151 5151
                 "type": "zip",
5152
-                "url": "https://api.github.com/repos/openspout/openspout/zipball/ab05a09fe6fce57c90338f83280648a9786ce36b",
5153
-                "reference": "ab05a09fe6fce57c90338f83280648a9786ce36b",
5152
+                "url": "https://api.github.com/repos/openspout/openspout/zipball/ec83106bc3922fe94c9d37976ba6b7259511c4c5",
5153
+                "reference": "ec83106bc3922fe94c9d37976ba6b7259511c4c5",
5154 5154
                 "shasum": ""
5155 5155
             },
5156 5156
             "require": {
@@ -5160,17 +5160,17 @@
5160 5160
                 "ext-libxml": "*",
5161 5161
                 "ext-xmlreader": "*",
5162 5162
                 "ext-zip": "*",
5163
-                "php": "~8.2.0 || ~8.3.0 || ~8.4.0"
5163
+                "php": "~8.3.0 || ~8.4.0"
5164 5164
             },
5165 5165
             "require-dev": {
5166 5166
                 "ext-zlib": "*",
5167
-                "friendsofphp/php-cs-fixer": "^3.68.3",
5168
-                "infection/infection": "^0.29.10",
5167
+                "friendsofphp/php-cs-fixer": "^3.71.0",
5168
+                "infection/infection": "^0.29.14",
5169 5169
                 "phpbench/phpbench": "^1.4.0",
5170
-                "phpstan/phpstan": "^2.1.2",
5170
+                "phpstan/phpstan": "^2.1.8",
5171 5171
                 "phpstan/phpstan-phpunit": "^2.0.4",
5172
-                "phpstan/phpstan-strict-rules": "^2",
5173
-                "phpunit/phpunit": "^11.5.4"
5172
+                "phpstan/phpstan-strict-rules": "^2.0.3",
5173
+                "phpunit/phpunit": "^12.0.7"
5174 5174
             },
5175 5175
             "suggest": {
5176 5176
                 "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)",
@@ -5218,7 +5218,7 @@
5218 5218
             ],
5219 5219
             "support": {
5220 5220
                 "issues": "https://github.com/openspout/openspout/issues",
5221
-                "source": "https://github.com/openspout/openspout/tree/v4.28.5"
5221
+                "source": "https://github.com/openspout/openspout/tree/v4.29.1"
5222 5222
             },
5223 5223
             "funding": [
5224 5224
                 {
@@ -5230,7 +5230,7 @@
5230 5230
                     "type": "github"
5231 5231
                 }
5232 5232
             ],
5233
-            "time": "2025-01-30T13:51:11+00:00"
5233
+            "time": "2025-03-11T14:40:46+00:00"
5234 5234
         },
5235 5235
         {
5236 5236
             "name": "paragonie/constant_time_encoding",
@@ -9704,16 +9704,16 @@
9704 9704
         },
9705 9705
         {
9706 9706
             "name": "laravel/pint",
9707
-            "version": "v1.21.0",
9707
+            "version": "v1.21.1",
9708 9708
             "source": {
9709 9709
                 "type": "git",
9710 9710
                 "url": "https://github.com/laravel/pint.git",
9711
-                "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425"
9711
+                "reference": "c44bffbb2334e90fba560933c45948fa4a3f3e86"
9712 9712
             },
9713 9713
             "dist": {
9714 9714
                 "type": "zip",
9715
-                "url": "https://api.github.com/repos/laravel/pint/zipball/531fa0871fbde719c51b12afa3a443b8f4e4b425",
9716
-                "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425",
9715
+                "url": "https://api.github.com/repos/laravel/pint/zipball/c44bffbb2334e90fba560933c45948fa4a3f3e86",
9716
+                "reference": "c44bffbb2334e90fba560933c45948fa4a3f3e86",
9717 9717
                 "shasum": ""
9718 9718
             },
9719 9719
             "require": {
@@ -9724,9 +9724,9 @@
9724 9724
                 "php": "^8.2.0"
9725 9725
             },
9726 9726
             "require-dev": {
9727
-                "friendsofphp/php-cs-fixer": "^3.68.5",
9728
-                "illuminate/view": "^11.42.0",
9729
-                "larastan/larastan": "^3.0.4",
9727
+                "friendsofphp/php-cs-fixer": "^3.70.2",
9728
+                "illuminate/view": "^11.44.1",
9729
+                "larastan/larastan": "^3.1.0",
9730 9730
                 "laravel-zero/framework": "^11.36.1",
9731 9731
                 "mockery/mockery": "^1.6.12",
9732 9732
                 "nunomaduro/termwind": "^2.3",
@@ -9766,7 +9766,7 @@
9766 9766
                 "issues": "https://github.com/laravel/pint/issues",
9767 9767
                 "source": "https://github.com/laravel/pint"
9768 9768
             },
9769
-            "time": "2025-02-18T03:18:57+00:00"
9769
+            "time": "2025-03-11T03:22:21+00:00"
9770 9770
         },
9771 9771
         {
9772 9772
             "name": "laravel/sail",
@@ -11526,16 +11526,16 @@
11526 11526
         },
11527 11527
         {
11528 11528
             "name": "sebastian/comparator",
11529
-            "version": "6.3.0",
11529
+            "version": "6.3.1",
11530 11530
             "source": {
11531 11531
                 "type": "git",
11532 11532
                 "url": "https://github.com/sebastianbergmann/comparator.git",
11533
-                "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115"
11533
+                "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959"
11534 11534
             },
11535 11535
             "dist": {
11536 11536
                 "type": "zip",
11537
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115",
11538
-                "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115",
11537
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
11538
+                "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
11539 11539
                 "shasum": ""
11540 11540
             },
11541 11541
             "require": {
@@ -11554,7 +11554,7 @@
11554 11554
             "type": "library",
11555 11555
             "extra": {
11556 11556
                 "branch-alias": {
11557
-                    "dev-main": "6.2-dev"
11557
+                    "dev-main": "6.3-dev"
11558 11558
                 }
11559 11559
             },
11560 11560
             "autoload": {
@@ -11594,7 +11594,7 @@
11594 11594
             "support": {
11595 11595
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
11596 11596
                 "security": "https://github.com/sebastianbergmann/comparator/security/policy",
11597
-                "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0"
11597
+                "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1"
11598 11598
             },
11599 11599
             "funding": [
11600 11600
                 {
@@ -11602,7 +11602,7 @@
11602 11602
                     "type": "github"
11603 11603
                 }
11604 11604
             ],
11605
-            "time": "2025-01-06T10:28:19+00:00"
11605
+            "time": "2025-03-07T06:57:01+00:00"
11606 11606
         },
11607 11607
         {
11608 11608
             "name": "sebastian/complexity",
@@ -12662,16 +12662,16 @@
12662 12662
         },
12663 12663
         {
12664 12664
             "name": "spatie/laravel-ray",
12665
-            "version": "1.39.1",
12665
+            "version": "1.40.0",
12666 12666
             "source": {
12667 12667
                 "type": "git",
12668 12668
                 "url": "https://github.com/spatie/laravel-ray.git",
12669
-                "reference": "0d890fa2cd2c0b6175cf54c56b9321d81047571d"
12669
+                "reference": "3bcca8c64cd6d45c903f20cb0a548e2143ffdf84"
12670 12670
             },
12671 12671
             "dist": {
12672 12672
                 "type": "zip",
12673
-                "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/0d890fa2cd2c0b6175cf54c56b9321d81047571d",
12674
-                "reference": "0d890fa2cd2c0b6175cf54c56b9321d81047571d",
12673
+                "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/3bcca8c64cd6d45c903f20cb0a548e2143ffdf84",
12674
+                "reference": "3bcca8c64cd6d45c903f20cb0a548e2143ffdf84",
12675 12675
                 "shasum": ""
12676 12676
             },
12677 12677
             "require": {
@@ -12734,7 +12734,7 @@
12734 12734
             ],
12735 12735
             "support": {
12736 12736
                 "issues": "https://github.com/spatie/laravel-ray/issues",
12737
-                "source": "https://github.com/spatie/laravel-ray/tree/1.39.1"
12737
+                "source": "https://github.com/spatie/laravel-ray/tree/1.40.0"
12738 12738
             },
12739 12739
             "funding": [
12740 12740
                 {
@@ -12746,7 +12746,7 @@
12746 12746
                     "type": "other"
12747 12747
                 }
12748 12748
             ],
12749
-            "time": "2025-02-05T08:16:15+00:00"
12749
+            "time": "2025-03-08T10:58:11+00:00"
12750 12750
         },
12751 12751
         {
12752 12752
             "name": "spatie/macroable",

+ 4
- 4
config/queue.php View File

@@ -40,7 +40,7 @@ return [
40 40
             'table' => env('DB_QUEUE_TABLE', 'jobs'),
41 41
             'queue' => env('DB_QUEUE', 'default'),
42 42
             'retry_after' => env('DB_QUEUE_RETRY_AFTER', 90),
43
-            'after_commit' => false,
43
+            'after_commit' => true,
44 44
         ],
45 45
 
46 46
         'beanstalkd' => [
@@ -49,7 +49,7 @@ return [
49 49
             'queue' => env('BEANSTALKD_QUEUE', 'default'),
50 50
             'retry_after' => env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
51 51
             'block_for' => 0,
52
-            'after_commit' => false,
52
+            'after_commit' => true,
53 53
         ],
54 54
 
55 55
         'sqs' => [
@@ -60,7 +60,7 @@ return [
60 60
             'queue' => env('SQS_QUEUE', 'default'),
61 61
             'suffix' => env('SQS_SUFFIX'),
62 62
             'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
63
-            'after_commit' => false,
63
+            'after_commit' => true,
64 64
         ],
65 65
 
66 66
         'redis' => [
@@ -69,7 +69,7 @@ return [
69 69
             'queue' => env('REDIS_QUEUE', 'default'),
70 70
             'retry_after' => env('REDIS_QUEUE_RETRY_AFTER', 90),
71 71
             'block_for' => null,
72
-            'after_commit' => false,
72
+            'after_commit' => true,
73 73
         ],
74 74
 
75 75
     ],

+ 6
- 6
database/migrations/2024_11_13_220301_create_document_line_items_table.php View File

@@ -17,12 +17,12 @@ return new class extends Migration
17 17
             $table->morphs('documentable');
18 18
             $table->foreignId('offering_id')->nullable()->constrained()->nullOnDelete();
19 19
             $table->string('description')->nullable();
20
-            $table->integer('quantity')->default(1);
21
-            $table->integer('unit_price')->default(0);
22
-            $table->integer('subtotal')->storedAs('quantity * unit_price');
23
-            $table->integer('total')->storedAs('(quantity * unit_price) + tax_total - discount_total');
24
-            $table->integer('tax_total')->default(0);
25
-            $table->integer('discount_total')->default(0);
20
+            $table->decimal('quantity', 10, 2)->default(1);
21
+            $table->bigInteger('unit_price')->default(0);
22
+            $table->bigInteger('subtotal')->storedAs('quantity * unit_price');
23
+            $table->bigInteger('total')->storedAs('(quantity * unit_price) + tax_total - discount_total');
24
+            $table->bigInteger('tax_total')->default(0);
25
+            $table->bigInteger('discount_total')->default(0);
26 26
             $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();
27 27
             $table->foreignId('updated_by')->nullable()->constrained('users')->nullOnDelete();
28 28
             $table->timestamps();

+ 1
- 1
database/migrations/2024_11_14_230753_create_adjustments_table.php View File

@@ -20,7 +20,7 @@ return new class extends Migration
20 20
             $table->string('category')->default('tax');
21 21
             $table->string('type')->default('sales');
22 22
             $table->boolean('recoverable')->default(false);
23
-            $table->integer('rate')->default(0);
23
+            $table->bigInteger('rate')->default(0);
24 24
             $table->string('computation')->default('percentage');
25 25
             $table->string('scope')->nullable();
26 26
             $table->dateTime('start_date')->nullable();

+ 7
- 7
database/migrations/2024_11_27_221657_create_bills_table.php View File

@@ -24,13 +24,13 @@ return new class extends Migration
24 24
             $table->string('currency_code')->nullable();
25 25
             $table->string('discount_method')->default('per_line_item');
26 26
             $table->string('discount_computation')->default('percentage');
27
-            $table->integer('discount_rate')->default(0);
28
-            $table->integer('subtotal')->default(0);
29
-            $table->integer('tax_total')->default(0);
30
-            $table->integer('discount_total')->default(0);
31
-            $table->integer('total')->default(0);
32
-            $table->integer('amount_paid')->default(0);
33
-            $table->integer('amount_due')->storedAs('total - amount_paid');
27
+            $table->bigInteger('discount_rate')->default(0);
28
+            $table->bigInteger('subtotal')->default(0);
29
+            $table->bigInteger('tax_total')->default(0);
30
+            $table->bigInteger('discount_total')->default(0);
31
+            $table->bigInteger('total')->default(0);
32
+            $table->bigInteger('amount_paid')->default(0);
33
+            $table->bigInteger('amount_due')->storedAs('total - amount_paid');
34 34
             $table->text('notes')->nullable();
35 35
             $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();
36 36
             $table->foreignId('updated_by')->nullable()->constrained('users')->nullOnDelete();

+ 5
- 5
database/migrations/2024_11_27_223000_create_estimates_table.php View File

@@ -32,11 +32,11 @@ return new class extends Migration
32 32
             $table->string('currency_code')->nullable();
33 33
             $table->string('discount_method')->default('per_line_item');
34 34
             $table->string('discount_computation')->default('percentage');
35
-            $table->integer('discount_rate')->default(0);
36
-            $table->integer('subtotal')->default(0);
37
-            $table->integer('tax_total')->default(0);
38
-            $table->integer('discount_total')->default(0);
39
-            $table->integer('total')->default(0);
35
+            $table->bigInteger('discount_rate')->default(0);
36
+            $table->bigInteger('subtotal')->default(0);
37
+            $table->bigInteger('tax_total')->default(0);
38
+            $table->bigInteger('discount_total')->default(0);
39
+            $table->bigInteger('total')->default(0);
40 40
             $table->text('terms')->nullable(); // terms, notes
41 41
             $table->text('footer')->nullable();
42 42
             $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();

+ 5
- 5
database/migrations/2024_11_27_223001_create_recurring_invoices_table.php View File

@@ -42,11 +42,11 @@ return new class extends Migration
42 42
             $table->string('currency_code')->nullable();
43 43
             $table->string('discount_method')->default('per_line_item');
44 44
             $table->string('discount_computation')->default('percentage');
45
-            $table->integer('discount_rate')->default(0);
46
-            $table->integer('subtotal')->default(0);
47
-            $table->integer('tax_total')->default(0);
48
-            $table->integer('discount_total')->default(0);
49
-            $table->integer('total')->default(0);
45
+            $table->bigInteger('discount_rate')->default(0);
46
+            $table->bigInteger('subtotal')->default(0);
47
+            $table->bigInteger('tax_total')->default(0);
48
+            $table->bigInteger('discount_total')->default(0);
49
+            $table->bigInteger('total')->default(0);
50 50
             $table->text('terms')->nullable(); // terms, notes
51 51
             $table->text('footer')->nullable();
52 52
             $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();

+ 7
- 7
database/migrations/2024_11_27_223015_create_invoices_table.php View File

@@ -32,13 +32,13 @@ return new class extends Migration
32 32
             $table->string('currency_code')->nullable();
33 33
             $table->string('discount_method')->default('per_line_item');
34 34
             $table->string('discount_computation')->default('percentage');
35
-            $table->integer('discount_rate')->default(0);
36
-            $table->integer('subtotal')->default(0);
37
-            $table->integer('tax_total')->default(0);
38
-            $table->integer('discount_total')->default(0);
39
-            $table->integer('total')->default(0);
40
-            $table->integer('amount_paid')->default(0);
41
-            $table->integer('amount_due')->storedAs('total - amount_paid');
35
+            $table->bigInteger('discount_rate')->default(0);
36
+            $table->bigInteger('subtotal')->default(0);
37
+            $table->bigInteger('tax_total')->default(0);
38
+            $table->bigInteger('discount_total')->default(0);
39
+            $table->bigInteger('total')->default(0);
40
+            $table->bigInteger('amount_paid')->default(0);
41
+            $table->bigInteger('amount_due')->storedAs('total - amount_paid');
42 42
             $table->text('terms')->nullable(); // terms, notes
43 43
             $table->text('footer')->nullable();
44 44
             $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();

+ 203
- 203
package-lock.json View File

@@ -30,9 +30,9 @@
30 30
             }
31 31
         },
32 32
         "node_modules/@esbuild/aix-ppc64": {
33
-            "version": "0.25.0",
34
-            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
35
-            "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
33
+            "version": "0.25.1",
34
+            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
35
+            "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
36 36
             "cpu": [
37 37
                 "ppc64"
38 38
             ],
@@ -47,9 +47,9 @@
47 47
             }
48 48
         },
49 49
         "node_modules/@esbuild/android-arm": {
50
-            "version": "0.25.0",
51
-            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
52
-            "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
50
+            "version": "0.25.1",
51
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
52
+            "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
53 53
             "cpu": [
54 54
                 "arm"
55 55
             ],
@@ -64,9 +64,9 @@
64 64
             }
65 65
         },
66 66
         "node_modules/@esbuild/android-arm64": {
67
-            "version": "0.25.0",
68
-            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
69
-            "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
67
+            "version": "0.25.1",
68
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
69
+            "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
70 70
             "cpu": [
71 71
                 "arm64"
72 72
             ],
@@ -81,9 +81,9 @@
81 81
             }
82 82
         },
83 83
         "node_modules/@esbuild/android-x64": {
84
-            "version": "0.25.0",
85
-            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
86
-            "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
84
+            "version": "0.25.1",
85
+            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
86
+            "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
87 87
             "cpu": [
88 88
                 "x64"
89 89
             ],
@@ -98,9 +98,9 @@
98 98
             }
99 99
         },
100 100
         "node_modules/@esbuild/darwin-arm64": {
101
-            "version": "0.25.0",
102
-            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
103
-            "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
101
+            "version": "0.25.1",
102
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
103
+            "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
104 104
             "cpu": [
105 105
                 "arm64"
106 106
             ],
@@ -115,9 +115,9 @@
115 115
             }
116 116
         },
117 117
         "node_modules/@esbuild/darwin-x64": {
118
-            "version": "0.25.0",
119
-            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
120
-            "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
118
+            "version": "0.25.1",
119
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
120
+            "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
121 121
             "cpu": [
122 122
                 "x64"
123 123
             ],
@@ -132,9 +132,9 @@
132 132
             }
133 133
         },
134 134
         "node_modules/@esbuild/freebsd-arm64": {
135
-            "version": "0.25.0",
136
-            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
137
-            "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
135
+            "version": "0.25.1",
136
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
137
+            "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
138 138
             "cpu": [
139 139
                 "arm64"
140 140
             ],
@@ -149,9 +149,9 @@
149 149
             }
150 150
         },
151 151
         "node_modules/@esbuild/freebsd-x64": {
152
-            "version": "0.25.0",
153
-            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
154
-            "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
152
+            "version": "0.25.1",
153
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
154
+            "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
155 155
             "cpu": [
156 156
                 "x64"
157 157
             ],
@@ -166,9 +166,9 @@
166 166
             }
167 167
         },
168 168
         "node_modules/@esbuild/linux-arm": {
169
-            "version": "0.25.0",
170
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
171
-            "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
169
+            "version": "0.25.1",
170
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
171
+            "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
172 172
             "cpu": [
173 173
                 "arm"
174 174
             ],
@@ -183,9 +183,9 @@
183 183
             }
184 184
         },
185 185
         "node_modules/@esbuild/linux-arm64": {
186
-            "version": "0.25.0",
187
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
188
-            "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
186
+            "version": "0.25.1",
187
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
188
+            "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
189 189
             "cpu": [
190 190
                 "arm64"
191 191
             ],
@@ -200,9 +200,9 @@
200 200
             }
201 201
         },
202 202
         "node_modules/@esbuild/linux-ia32": {
203
-            "version": "0.25.0",
204
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
205
-            "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
203
+            "version": "0.25.1",
204
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
205
+            "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
206 206
             "cpu": [
207 207
                 "ia32"
208 208
             ],
@@ -217,9 +217,9 @@
217 217
             }
218 218
         },
219 219
         "node_modules/@esbuild/linux-loong64": {
220
-            "version": "0.25.0",
221
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
222
-            "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
220
+            "version": "0.25.1",
221
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
222
+            "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
223 223
             "cpu": [
224 224
                 "loong64"
225 225
             ],
@@ -234,9 +234,9 @@
234 234
             }
235 235
         },
236 236
         "node_modules/@esbuild/linux-mips64el": {
237
-            "version": "0.25.0",
238
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
239
-            "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
237
+            "version": "0.25.1",
238
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
239
+            "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
240 240
             "cpu": [
241 241
                 "mips64el"
242 242
             ],
@@ -251,9 +251,9 @@
251 251
             }
252 252
         },
253 253
         "node_modules/@esbuild/linux-ppc64": {
254
-            "version": "0.25.0",
255
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
256
-            "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
254
+            "version": "0.25.1",
255
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
256
+            "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
257 257
             "cpu": [
258 258
                 "ppc64"
259 259
             ],
@@ -268,9 +268,9 @@
268 268
             }
269 269
         },
270 270
         "node_modules/@esbuild/linux-riscv64": {
271
-            "version": "0.25.0",
272
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
273
-            "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
271
+            "version": "0.25.1",
272
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
273
+            "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
274 274
             "cpu": [
275 275
                 "riscv64"
276 276
             ],
@@ -285,9 +285,9 @@
285 285
             }
286 286
         },
287 287
         "node_modules/@esbuild/linux-s390x": {
288
-            "version": "0.25.0",
289
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
290
-            "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
288
+            "version": "0.25.1",
289
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
290
+            "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
291 291
             "cpu": [
292 292
                 "s390x"
293 293
             ],
@@ -302,9 +302,9 @@
302 302
             }
303 303
         },
304 304
         "node_modules/@esbuild/linux-x64": {
305
-            "version": "0.25.0",
306
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
307
-            "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
305
+            "version": "0.25.1",
306
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
307
+            "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
308 308
             "cpu": [
309 309
                 "x64"
310 310
             ],
@@ -319,9 +319,9 @@
319 319
             }
320 320
         },
321 321
         "node_modules/@esbuild/netbsd-arm64": {
322
-            "version": "0.25.0",
323
-            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
324
-            "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
322
+            "version": "0.25.1",
323
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
324
+            "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
325 325
             "cpu": [
326 326
                 "arm64"
327 327
             ],
@@ -336,9 +336,9 @@
336 336
             }
337 337
         },
338 338
         "node_modules/@esbuild/netbsd-x64": {
339
-            "version": "0.25.0",
340
-            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
341
-            "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
339
+            "version": "0.25.1",
340
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
341
+            "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
342 342
             "cpu": [
343 343
                 "x64"
344 344
             ],
@@ -353,9 +353,9 @@
353 353
             }
354 354
         },
355 355
         "node_modules/@esbuild/openbsd-arm64": {
356
-            "version": "0.25.0",
357
-            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
358
-            "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
356
+            "version": "0.25.1",
357
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
358
+            "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
359 359
             "cpu": [
360 360
                 "arm64"
361 361
             ],
@@ -370,9 +370,9 @@
370 370
             }
371 371
         },
372 372
         "node_modules/@esbuild/openbsd-x64": {
373
-            "version": "0.25.0",
374
-            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
375
-            "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
373
+            "version": "0.25.1",
374
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
375
+            "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
376 376
             "cpu": [
377 377
                 "x64"
378 378
             ],
@@ -387,9 +387,9 @@
387 387
             }
388 388
         },
389 389
         "node_modules/@esbuild/sunos-x64": {
390
-            "version": "0.25.0",
391
-            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
392
-            "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
390
+            "version": "0.25.1",
391
+            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
392
+            "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
393 393
             "cpu": [
394 394
                 "x64"
395 395
             ],
@@ -404,9 +404,9 @@
404 404
             }
405 405
         },
406 406
         "node_modules/@esbuild/win32-arm64": {
407
-            "version": "0.25.0",
408
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
409
-            "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
407
+            "version": "0.25.1",
408
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
409
+            "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
410 410
             "cpu": [
411 411
                 "arm64"
412 412
             ],
@@ -421,9 +421,9 @@
421 421
             }
422 422
         },
423 423
         "node_modules/@esbuild/win32-ia32": {
424
-            "version": "0.25.0",
425
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
426
-            "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
424
+            "version": "0.25.1",
425
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
426
+            "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
427 427
             "cpu": [
428 428
                 "ia32"
429 429
             ],
@@ -438,9 +438,9 @@
438 438
             }
439 439
         },
440 440
         "node_modules/@esbuild/win32-x64": {
441
-            "version": "0.25.0",
442
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
443
-            "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
441
+            "version": "0.25.1",
442
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
443
+            "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
444 444
             "cpu": [
445 445
                 "x64"
446 446
             ],
@@ -575,9 +575,9 @@
575 575
             }
576 576
         },
577 577
         "node_modules/@rollup/rollup-android-arm-eabi": {
578
-            "version": "4.34.9",
579
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz",
580
-            "integrity": "sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==",
578
+            "version": "4.35.0",
579
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz",
580
+            "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==",
581 581
             "cpu": [
582 582
                 "arm"
583 583
             ],
@@ -589,9 +589,9 @@
589 589
             ]
590 590
         },
591 591
         "node_modules/@rollup/rollup-android-arm64": {
592
-            "version": "4.34.9",
593
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz",
594
-            "integrity": "sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==",
592
+            "version": "4.35.0",
593
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz",
594
+            "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==",
595 595
             "cpu": [
596 596
                 "arm64"
597 597
             ],
@@ -603,9 +603,9 @@
603 603
             ]
604 604
         },
605 605
         "node_modules/@rollup/rollup-darwin-arm64": {
606
-            "version": "4.34.9",
607
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz",
608
-            "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==",
606
+            "version": "4.35.0",
607
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz",
608
+            "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==",
609 609
             "cpu": [
610 610
                 "arm64"
611 611
             ],
@@ -617,9 +617,9 @@
617 617
             ]
618 618
         },
619 619
         "node_modules/@rollup/rollup-darwin-x64": {
620
-            "version": "4.34.9",
621
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz",
622
-            "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==",
620
+            "version": "4.35.0",
621
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz",
622
+            "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==",
623 623
             "cpu": [
624 624
                 "x64"
625 625
             ],
@@ -631,9 +631,9 @@
631 631
             ]
632 632
         },
633 633
         "node_modules/@rollup/rollup-freebsd-arm64": {
634
-            "version": "4.34.9",
635
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz",
636
-            "integrity": "sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==",
634
+            "version": "4.35.0",
635
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz",
636
+            "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==",
637 637
             "cpu": [
638 638
                 "arm64"
639 639
             ],
@@ -645,9 +645,9 @@
645 645
             ]
646 646
         },
647 647
         "node_modules/@rollup/rollup-freebsd-x64": {
648
-            "version": "4.34.9",
649
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz",
650
-            "integrity": "sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==",
648
+            "version": "4.35.0",
649
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz",
650
+            "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==",
651 651
             "cpu": [
652 652
                 "x64"
653 653
             ],
@@ -659,9 +659,9 @@
659 659
             ]
660 660
         },
661 661
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
662
-            "version": "4.34.9",
663
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz",
664
-            "integrity": "sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==",
662
+            "version": "4.35.0",
663
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz",
664
+            "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==",
665 665
             "cpu": [
666 666
                 "arm"
667 667
             ],
@@ -673,9 +673,9 @@
673 673
             ]
674 674
         },
675 675
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
676
-            "version": "4.34.9",
677
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz",
678
-            "integrity": "sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==",
676
+            "version": "4.35.0",
677
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz",
678
+            "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==",
679 679
             "cpu": [
680 680
                 "arm"
681 681
             ],
@@ -687,9 +687,9 @@
687 687
             ]
688 688
         },
689 689
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
690
-            "version": "4.34.9",
691
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz",
692
-            "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==",
690
+            "version": "4.35.0",
691
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz",
692
+            "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==",
693 693
             "cpu": [
694 694
                 "arm64"
695 695
             ],
@@ -701,9 +701,9 @@
701 701
             ]
702 702
         },
703 703
         "node_modules/@rollup/rollup-linux-arm64-musl": {
704
-            "version": "4.34.9",
705
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz",
706
-            "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==",
704
+            "version": "4.35.0",
705
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz",
706
+            "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==",
707 707
             "cpu": [
708 708
                 "arm64"
709 709
             ],
@@ -715,9 +715,9 @@
715 715
             ]
716 716
         },
717 717
         "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
718
-            "version": "4.34.9",
719
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz",
720
-            "integrity": "sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==",
718
+            "version": "4.35.0",
719
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz",
720
+            "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==",
721 721
             "cpu": [
722 722
                 "loong64"
723 723
             ],
@@ -729,9 +729,9 @@
729 729
             ]
730 730
         },
731 731
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
732
-            "version": "4.34.9",
733
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz",
734
-            "integrity": "sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==",
732
+            "version": "4.35.0",
733
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz",
734
+            "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==",
735 735
             "cpu": [
736 736
                 "ppc64"
737 737
             ],
@@ -743,9 +743,9 @@
743 743
             ]
744 744
         },
745 745
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
746
-            "version": "4.34.9",
747
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz",
748
-            "integrity": "sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==",
746
+            "version": "4.35.0",
747
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz",
748
+            "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==",
749 749
             "cpu": [
750 750
                 "riscv64"
751 751
             ],
@@ -757,9 +757,9 @@
757 757
             ]
758 758
         },
759 759
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
760
-            "version": "4.34.9",
761
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz",
762
-            "integrity": "sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==",
760
+            "version": "4.35.0",
761
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz",
762
+            "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==",
763 763
             "cpu": [
764 764
                 "s390x"
765 765
             ],
@@ -771,9 +771,9 @@
771 771
             ]
772 772
         },
773 773
         "node_modules/@rollup/rollup-linux-x64-gnu": {
774
-            "version": "4.34.9",
775
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz",
776
-            "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==",
774
+            "version": "4.35.0",
775
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz",
776
+            "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==",
777 777
             "cpu": [
778 778
                 "x64"
779 779
             ],
@@ -785,9 +785,9 @@
785 785
             ]
786 786
         },
787 787
         "node_modules/@rollup/rollup-linux-x64-musl": {
788
-            "version": "4.34.9",
789
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz",
790
-            "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==",
788
+            "version": "4.35.0",
789
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
790
+            "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
791 791
             "cpu": [
792 792
                 "x64"
793 793
             ],
@@ -799,9 +799,9 @@
799 799
             ]
800 800
         },
801 801
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
802
-            "version": "4.34.9",
803
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz",
804
-            "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==",
802
+            "version": "4.35.0",
803
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz",
804
+            "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==",
805 805
             "cpu": [
806 806
                 "arm64"
807 807
             ],
@@ -813,9 +813,9 @@
813 813
             ]
814 814
         },
815 815
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
816
-            "version": "4.34.9",
817
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz",
818
-            "integrity": "sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==",
816
+            "version": "4.35.0",
817
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz",
818
+            "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==",
819 819
             "cpu": [
820 820
                 "ia32"
821 821
             ],
@@ -827,9 +827,9 @@
827 827
             ]
828 828
         },
829 829
         "node_modules/@rollup/rollup-win32-x64-msvc": {
830
-            "version": "4.34.9",
831
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz",
832
-            "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==",
830
+            "version": "4.35.0",
831
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz",
832
+            "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==",
833 833
             "cpu": [
834 834
                 "x64"
835 835
             ],
@@ -938,9 +938,9 @@
938 938
             "license": "MIT"
939 939
         },
940 940
         "node_modules/autoprefixer": {
941
-            "version": "10.4.20",
942
-            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
943
-            "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
941
+            "version": "10.4.21",
942
+            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
943
+            "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
944 944
             "dev": true,
945 945
             "funding": [
946 946
                 {
@@ -958,11 +958,11 @@
958 958
             ],
959 959
             "license": "MIT",
960 960
             "dependencies": {
961
-                "browserslist": "^4.23.3",
962
-                "caniuse-lite": "^1.0.30001646",
961
+                "browserslist": "^4.24.4",
962
+                "caniuse-lite": "^1.0.30001702",
963 963
                 "fraction.js": "^4.3.7",
964 964
                 "normalize-range": "^0.1.2",
965
-                "picocolors": "^1.0.1",
965
+                "picocolors": "^1.1.1",
966 966
                 "postcss-value-parser": "^4.2.0"
967 967
             },
968 968
             "bin": {
@@ -976,9 +976,9 @@
976 976
             }
977 977
         },
978 978
         "node_modules/axios": {
979
-            "version": "1.8.1",
980
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz",
981
-            "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==",
979
+            "version": "1.8.2",
980
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz",
981
+            "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==",
982 982
             "dev": true,
983 983
             "license": "MIT",
984 984
             "dependencies": {
@@ -1088,9 +1088,9 @@
1088 1088
             }
1089 1089
         },
1090 1090
         "node_modules/caniuse-lite": {
1091
-            "version": "1.0.30001702",
1092
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz",
1093
-            "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==",
1091
+            "version": "1.0.30001703",
1092
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz",
1093
+            "integrity": "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==",
1094 1094
             "dev": true,
1095 1095
             "funding": [
1096 1096
                 {
@@ -1264,9 +1264,9 @@
1264 1264
             "license": "MIT"
1265 1265
         },
1266 1266
         "node_modules/electron-to-chromium": {
1267
-            "version": "1.5.112",
1268
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz",
1269
-            "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==",
1267
+            "version": "1.5.114",
1268
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz",
1269
+            "integrity": "sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==",
1270 1270
             "dev": true,
1271 1271
             "license": "ISC"
1272 1272
         },
@@ -1327,9 +1327,9 @@
1327 1327
             }
1328 1328
         },
1329 1329
         "node_modules/esbuild": {
1330
-            "version": "0.25.0",
1331
-            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
1332
-            "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
1330
+            "version": "0.25.1",
1331
+            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
1332
+            "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
1333 1333
             "dev": true,
1334 1334
             "hasInstallScript": true,
1335 1335
             "license": "MIT",
@@ -1340,31 +1340,31 @@
1340 1340
                 "node": ">=18"
1341 1341
             },
1342 1342
             "optionalDependencies": {
1343
-                "@esbuild/aix-ppc64": "0.25.0",
1344
-                "@esbuild/android-arm": "0.25.0",
1345
-                "@esbuild/android-arm64": "0.25.0",
1346
-                "@esbuild/android-x64": "0.25.0",
1347
-                "@esbuild/darwin-arm64": "0.25.0",
1348
-                "@esbuild/darwin-x64": "0.25.0",
1349
-                "@esbuild/freebsd-arm64": "0.25.0",
1350
-                "@esbuild/freebsd-x64": "0.25.0",
1351
-                "@esbuild/linux-arm": "0.25.0",
1352
-                "@esbuild/linux-arm64": "0.25.0",
1353
-                "@esbuild/linux-ia32": "0.25.0",
1354
-                "@esbuild/linux-loong64": "0.25.0",
1355
-                "@esbuild/linux-mips64el": "0.25.0",
1356
-                "@esbuild/linux-ppc64": "0.25.0",
1357
-                "@esbuild/linux-riscv64": "0.25.0",
1358
-                "@esbuild/linux-s390x": "0.25.0",
1359
-                "@esbuild/linux-x64": "0.25.0",
1360
-                "@esbuild/netbsd-arm64": "0.25.0",
1361
-                "@esbuild/netbsd-x64": "0.25.0",
1362
-                "@esbuild/openbsd-arm64": "0.25.0",
1363
-                "@esbuild/openbsd-x64": "0.25.0",
1364
-                "@esbuild/sunos-x64": "0.25.0",
1365
-                "@esbuild/win32-arm64": "0.25.0",
1366
-                "@esbuild/win32-ia32": "0.25.0",
1367
-                "@esbuild/win32-x64": "0.25.0"
1343
+                "@esbuild/aix-ppc64": "0.25.1",
1344
+                "@esbuild/android-arm": "0.25.1",
1345
+                "@esbuild/android-arm64": "0.25.1",
1346
+                "@esbuild/android-x64": "0.25.1",
1347
+                "@esbuild/darwin-arm64": "0.25.1",
1348
+                "@esbuild/darwin-x64": "0.25.1",
1349
+                "@esbuild/freebsd-arm64": "0.25.1",
1350
+                "@esbuild/freebsd-x64": "0.25.1",
1351
+                "@esbuild/linux-arm": "0.25.1",
1352
+                "@esbuild/linux-arm64": "0.25.1",
1353
+                "@esbuild/linux-ia32": "0.25.1",
1354
+                "@esbuild/linux-loong64": "0.25.1",
1355
+                "@esbuild/linux-mips64el": "0.25.1",
1356
+                "@esbuild/linux-ppc64": "0.25.1",
1357
+                "@esbuild/linux-riscv64": "0.25.1",
1358
+                "@esbuild/linux-s390x": "0.25.1",
1359
+                "@esbuild/linux-x64": "0.25.1",
1360
+                "@esbuild/netbsd-arm64": "0.25.1",
1361
+                "@esbuild/netbsd-x64": "0.25.1",
1362
+                "@esbuild/openbsd-arm64": "0.25.1",
1363
+                "@esbuild/openbsd-x64": "0.25.1",
1364
+                "@esbuild/sunos-x64": "0.25.1",
1365
+                "@esbuild/win32-arm64": "0.25.1",
1366
+                "@esbuild/win32-ia32": "0.25.1",
1367
+                "@esbuild/win32-x64": "0.25.1"
1368 1368
             }
1369 1369
         },
1370 1370
         "node_modules/escalade": {
@@ -1930,9 +1930,9 @@
1930 1930
             }
1931 1931
         },
1932 1932
         "node_modules/nanoid": {
1933
-            "version": "3.3.8",
1934
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
1935
-            "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
1933
+            "version": "3.3.9",
1934
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
1935
+            "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
1936 1936
             "dev": true,
1937 1937
             "funding": [
1938 1938
                 {
@@ -2412,9 +2412,9 @@
2412 2412
             }
2413 2413
         },
2414 2414
         "node_modules/rollup": {
2415
-            "version": "4.34.9",
2416
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.9.tgz",
2417
-            "integrity": "sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==",
2415
+            "version": "4.35.0",
2416
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz",
2417
+            "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==",
2418 2418
             "dev": true,
2419 2419
             "license": "MIT",
2420 2420
             "dependencies": {
@@ -2428,25 +2428,25 @@
2428 2428
                 "npm": ">=8.0.0"
2429 2429
             },
2430 2430
             "optionalDependencies": {
2431
-                "@rollup/rollup-android-arm-eabi": "4.34.9",
2432
-                "@rollup/rollup-android-arm64": "4.34.9",
2433
-                "@rollup/rollup-darwin-arm64": "4.34.9",
2434
-                "@rollup/rollup-darwin-x64": "4.34.9",
2435
-                "@rollup/rollup-freebsd-arm64": "4.34.9",
2436
-                "@rollup/rollup-freebsd-x64": "4.34.9",
2437
-                "@rollup/rollup-linux-arm-gnueabihf": "4.34.9",
2438
-                "@rollup/rollup-linux-arm-musleabihf": "4.34.9",
2439
-                "@rollup/rollup-linux-arm64-gnu": "4.34.9",
2440
-                "@rollup/rollup-linux-arm64-musl": "4.34.9",
2441
-                "@rollup/rollup-linux-loongarch64-gnu": "4.34.9",
2442
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.34.9",
2443
-                "@rollup/rollup-linux-riscv64-gnu": "4.34.9",
2444
-                "@rollup/rollup-linux-s390x-gnu": "4.34.9",
2445
-                "@rollup/rollup-linux-x64-gnu": "4.34.9",
2446
-                "@rollup/rollup-linux-x64-musl": "4.34.9",
2447
-                "@rollup/rollup-win32-arm64-msvc": "4.34.9",
2448
-                "@rollup/rollup-win32-ia32-msvc": "4.34.9",
2449
-                "@rollup/rollup-win32-x64-msvc": "4.34.9",
2431
+                "@rollup/rollup-android-arm-eabi": "4.35.0",
2432
+                "@rollup/rollup-android-arm64": "4.35.0",
2433
+                "@rollup/rollup-darwin-arm64": "4.35.0",
2434
+                "@rollup/rollup-darwin-x64": "4.35.0",
2435
+                "@rollup/rollup-freebsd-arm64": "4.35.0",
2436
+                "@rollup/rollup-freebsd-x64": "4.35.0",
2437
+                "@rollup/rollup-linux-arm-gnueabihf": "4.35.0",
2438
+                "@rollup/rollup-linux-arm-musleabihf": "4.35.0",
2439
+                "@rollup/rollup-linux-arm64-gnu": "4.35.0",
2440
+                "@rollup/rollup-linux-arm64-musl": "4.35.0",
2441
+                "@rollup/rollup-linux-loongarch64-gnu": "4.35.0",
2442
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0",
2443
+                "@rollup/rollup-linux-riscv64-gnu": "4.35.0",
2444
+                "@rollup/rollup-linux-s390x-gnu": "4.35.0",
2445
+                "@rollup/rollup-linux-x64-gnu": "4.35.0",
2446
+                "@rollup/rollup-linux-x64-musl": "4.35.0",
2447
+                "@rollup/rollup-win32-arm64-msvc": "4.35.0",
2448
+                "@rollup/rollup-win32-ia32-msvc": "4.35.0",
2449
+                "@rollup/rollup-win32-x64-msvc": "4.35.0",
2450 2450
                 "fsevents": "~2.3.2"
2451 2451
             }
2452 2452
         },
@@ -2794,9 +2794,9 @@
2794 2794
             "license": "MIT"
2795 2795
         },
2796 2796
         "node_modules/vite": {
2797
-            "version": "6.2.0",
2798
-            "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
2799
-            "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
2797
+            "version": "6.2.1",
2798
+            "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz",
2799
+            "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==",
2800 2800
             "dev": true,
2801 2801
             "license": "MIT",
2802 2802
             "dependencies": {

+ 1
- 1
resources/views/components/company/document-template/footer.blade.php View File

@@ -1,3 +1,3 @@
1
-<footer {{ $attributes->class(['doc-template-footer text-xs text-gray-600 dark:text-gray-300 min-h-60']) }}>
1
+<footer {{ $attributes->class(['doc-template-footer min-h-60']) }}>
2 2
     {{ $slot }}
3 3
 </footer>

+ 1
- 1
resources/views/components/company/document-template/header.blade.php View File

@@ -1,3 +1,3 @@
1
-<header {{ $attributes->class(['doc-template-header flex py-2 relative']) }}>
1
+<header {{ $attributes->class(['doc-template-header flex p-6 relative']) }}>
2 2
     {{ $slot }}
3 3
 </header>

+ 1
- 1
resources/views/components/company/document-template/line-items.blade.php View File

@@ -1,3 +1,3 @@
1
-<div {{ $attributes->class(['doc-template-line-items py-6']) }}>
1
+<div {{ $attributes->class(['doc-template-line-items py-4']) }}>
2 2
     {{ $slot }}
3 3
 </div>

+ 14
- 12
resources/views/components/icons/document-header-decoration.blade.php View File

@@ -4,16 +4,18 @@
4 4
 ])
5 5
 
6 6
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 72" aria-hidden="true" fill="none" {{ $attributes }}>
7
-   <g stroke="{{ $color }}" stroke-width="2">
8
-       <path d="M20 57.038v-42.076c.33.025.664.038 1 .038 7.18 0 13-5.82 13-13 0-.336-.013-.67-.038-1h172.076c-.025.33-.038.664-.038 1 0 7.18 5.82 13 13 13 .336 0 .67-.013 1-.038v42.076c-.33-.025-.664-.038-1-.038-7.18 0-13 5.82-13 13 0 .336.013.67.038 1h-172.076c.025-.33.038-.664.038-1 0-7.18-5.82-13-13-13-.336 0-.67.013-1 .038z" />
9
-       <path d="M26 51.503v-31.007c.33.024.664.037 1 .037 7.18 0 13-5.626 13-12.567 0-.325.013-.648-.038-.967h160.076c-.025.319-.038.641-.038.967 0 6.94 5.82 12.567 13 12.567.336 0 .67-.012 1-.037v31.007c-.33-.024-.664-.037-1-.037-7.18 0-13 5.626-13 12.567 0 .325.013.648.038.967h-160.076c.025-.319.038-.641.038-.967 0-6.94-5.82-12.567-13-12.567-.336 0-.67.012-1 .037z" />
10
-   </g>
11
-   <text
12
-       x="50%"
13
-       y="50%"
14
-       text-anchor="middle"
15
-       dominant-baseline="middle"
16
-       class="text-3xl font-light tracking-tight"
17
-       fill="{{ $color }}"
18
-   >{{ $text }}</text>
7
+    <g stroke="{{ $color }}" stroke-width="2">
8
+        <path
9
+            d="M20 57.038v-42.076c.33.025.664.038 1 .038 7.18 0 13-5.82 13-13 0-.336-.013-.67-.038-1h172.076c-.025.33-.038.664-.038 1 0 7.18 5.82 13 13 13 .336 0 .67-.013 1-.038v42.076c-.33-.025-.664-.038-1-.038-7.18 0-13 5.82-13 13 0 .336.013.67.038 1h-172.076c.025-.33.038-.664.038-1 0-7.18-5.82-13-13-13-.336 0-.67.013-1 .038z"/>
10
+        <path
11
+            d="M26 51.503v-31.007c.33.024.664.037 1 .037 7.18 0 13-5.626 13-12.567 0-.325.013-.648-.038-.967h160.076c-.025.319-.038.641-.038.967 0 6.94 5.82 12.567 13 12.567.336 0 .67-.012 1-.037v31.007c-.33-.024-.664-.037-1-.037-7.18 0-13 5.626-13 12.567 0 .325.013.648.038.967h-160.076c.025-.319.038-.641.038-.967 0-6.94-5.82-12.567-13-12.567-.336 0-.67.012-1 .037z"/>
12
+    </g>
13
+    <text
14
+        x="50%"
15
+        y="50%"
16
+        text-anchor="middle"
17
+        dominant-baseline="middle"
18
+        class="text-3xl font-light"
19
+        fill="{{ $color }}"
20
+    >{{ $text }}</text>
19 21
 </svg>

+ 43
- 32
resources/views/filament/company/components/document-templates/classic.blade.php View File

@@ -14,23 +14,23 @@
14 14
 <x-company.document-template.container class="classic-template-container" preview>
15 15
     <!-- Header Section -->
16 16
     <x-company.document-template.header class="default-template-header">
17
-        <div class="w-2/3 text-left ml-6">
17
+        <div class="w-2/3 text-left">
18 18
             <div class="text-xs">
19
-                <h2 class="text-base font-semibold">{{ $document->company->name }}</h2>
19
+                <strong class="text-xs block">{{ $document->company->name }}</strong>
20 20
                 @if($formattedAddress = $document->company->getFormattedAddressHtml())
21 21
                     {!! $formattedAddress !!}
22 22
                 @endif
23 23
             </div>
24 24
         </div>
25 25
 
26
-        <div class="w-1/3 flex justify-end mr-6">
26
+        <div class="w-1/3 flex justify-end">
27 27
             @if($document->logo && $document->showLogo)
28 28
                 <x-company.document-template.logo :src="$document->logo"/>
29 29
             @endif
30 30
         </div>
31 31
     </x-company.document-template.header>
32 32
 
33
-    <x-company.document-template.metadata class="classic-template-metadata">
33
+    <x-company.document-template.metadata class="classic-template-metadata space-y-2">
34 34
         <div class="items-center flex">
35 35
             <hr class="grow-[2] py-0.5 border-solid border-y-2" style="border-color: {{ $document->accentColor }};">
36 36
             <x-icons.document-header-decoration
@@ -40,13 +40,15 @@
40 40
             />
41 41
             <hr class="grow-[2] py-0.5 border-solid border-y-2" style="border-color: {{ $document->accentColor }};">
42 42
         </div>
43
-        <div class="mt-2 text-sm text-center text-gray-600 dark:text-gray-400">{{ $document->subheader }}</div>
43
+        @if ($document->subheader)
44
+            <p class="text-xs text-center text-gray-600 dark:text-gray-400">{{ $document->subheader }}</p>
45
+        @endif
44 46
 
45 47
         <div class="flex justify-between items-end">
46 48
             <!-- Billing Details -->
47 49
             <div class="text-xs">
48
-                <h3 class="text-gray-600 dark:text-gray-400 font-medium tracking-tight mb-1">BILL TO</h3>
49
-                <p class="text-base font-bold">{{ $document->client->name }}</p>
50
+                <h3 class="text-gray-600 dark:text-gray-400 font-medium mb-1">BILL TO</h3>
51
+                <p class="text-xs font-bold">{{ $document->client->name }}</p>
50 52
                 @if($formattedAddress = $document->client->getFormattedAddressHtml())
51 53
                     {!! $formattedAddress !!}
52 54
                 @endif
@@ -80,7 +82,7 @@
80 82
     <!-- Line Items -->
81 83
     <x-company.document-template.line-items class="classic-template-line-items px-6">
82 84
         <table class="w-full text-left table-fixed">
83
-            <thead class="text-sm leading-8">
85
+            <thead class="text-xs leading-8">
84 86
             <tr>
85 87
                 <th class="text-left">{{ $document->columnLabel->items }}</th>
86 88
                 <th class="text-center">{{ $document->columnLabel->units }}</th>
@@ -101,37 +103,46 @@
101 103
         </table>
102 104
 
103 105
         <!-- Financial Details and Notes -->
104
-        <div class="flex justify-between text-xs space-x-1">
106
+        <div class="flex justify-between text-xs space-x-1 pt-2">
105 107
             <!-- Notes Section -->
106
-            <div class="w-1/2 border border-dashed border-gray-300 p-2 mt-4">
107
-                <h4 class="font-semibold mb-2">Notes</h4>
108
-                <p>{{ $document->footer }}</p>
108
+            <div class="w-[60%] py-2">
109
+                <p class="font-semibold">{{ $document->footer }}</p>
109 110
             </div>
110 111
 
111 112
             <!-- Financial Summary -->
112
-            <div class="w-1/2 mt-2">
113
-                <table class="w-full table-fixed">
114
-                    <tbody class="text-xs leading-loose">
113
+            <div class="w-[40%]">
114
+                <table class="w-full table-fixed whitespace-nowrap">
115
+                    <tbody class="text-xs">
115 116
                     <tr>
116
-                        <td class="text-right font-semibold">Subtotal:</td>
117
-                        <td class="text-right">{{ $document->subtotal }}</td>
118
-                    </tr>
119
-                    <tr class="text-success-800 dark:text-success-600">
120
-                        <td class="text-right">Discount (5%):</td>
121
-                        <td class="text-right">({{ $document->discount }})</td>
122
-                    </tr>
123
-                    <tr>
124
-                        <td class="text-right">Sales Tax (10%):</td>
125
-                        <td class="text-right">{{ $document->tax }}</td>
126
-                    </tr>
127
-                    <tr>
128
-                        <td class="text-right font-semibold">Total:</td>
129
-                        <td class="text-right">{{ $document->total }}</td>
117
+                        <td class="text-right font-semibold py-2">Subtotal:</td>
118
+                        <td class="text-right py-2">{{ $document->subtotal }}</td>
130 119
                     </tr>
120
+                    @if($document->discount)
121
+                        <tr class="text-success-800 dark:text-success-600">
122
+                            <td class="text-right py-2">Discount:</td>
123
+                            <td class="text-right py-2">
124
+                                ({{ $document->discount }})
125
+                            </td>
126
+                        </tr>
127
+                    @endif
128
+                    @if($document->tax)
129
+                        <tr>
130
+                            <td class="text-right py-2">Tax:</td>
131
+                            <td class="text-right py-2">{{ $document->tax }}</td>
132
+                        </tr>
133
+                    @endif
131 134
                     <tr>
132
-                        <td class="text-right font-semibold">Amount Due (USD):</td>
133
-                        <td class="text-right">{{ $document->amountDue }}</td>
135
+                        <td class="text-right font-semibold border-t py-2">Total:</td>
136
+                        <td class="text-right border-t py-2">{{ $document->total }}</td>
134 137
                     </tr>
138
+                    @if($document->amountDue)
139
+                        <tr>
140
+                            <td class="text-right font-semibold border-t-4 border-double py-2">{{ $document->label->amountDue }}
141
+                                ({{ $document->currencyCode }}):
142
+                            </td>
143
+                            <td class="text-right border-t-4 border-double py-2">{{ $document->amountDue }}</td>
144
+                        </tr>
145
+                    @endif
135 146
                     </tbody>
136 147
                 </table>
137 148
             </div>
@@ -139,7 +150,7 @@
139 150
     </x-company.document-template.line-items>
140 151
 
141 152
     <!-- Footer -->
142
-    <x-company.document-template.footer class="classic-template-footer">
153
+    <x-company.document-template.footer class="classic-template-footer text-xs">
143 154
         <h4 class="font-semibold px-6 mb-2">Terms & Conditions</h4>
144 155
         <p class="px-6 break-words line-clamp-4">{{ $document->terms }}</p>
145 156
     </x-company.document-template.footer>

+ 34
- 25
resources/views/filament/company/components/document-templates/default.blade.php View File

@@ -13,36 +13,37 @@
13 13
 
14 14
 <x-company.document-template.container class="default-template-container" preview>
15 15
 
16
-    <x-company.document-template.header class="default-template-header border-b-2 p-6 pb-4">
17
-        <div class="w-2/3">
16
+    <x-company.document-template.header class="default-template-header border-b">
17
+        <div class="w-1/3">
18 18
             @if($document->logo && $document->showLogo)
19 19
                 <x-company.document-template.logo :src="$document->logo"/>
20 20
             @endif
21 21
         </div>
22 22
 
23
-        <div class="w-1/3 text-right">
24
-            <div class="text-xs">
25
-                <h2 class="font-semibold">{{ $document->company->name }}</h2>
26
-                @if($formattedAddress = $document->company->getFormattedAddressHtml())
27
-                    {!! $formattedAddress !!}
28
-                @endif
23
+        <div class="w-2/3 text-right">
24
+            <div class="space-y-4">
25
+                <div>
26
+                    <h1 class="text-3xl font-light uppercase">{{ $document->header }}</h1>
27
+                    @if ($document->subheader)
28
+                        <p class="text-xs text-gray-600 dark:text-gray-400">{{ $document->subheader }}</p>
29
+                    @endif
30
+                </div>
31
+                <div class="text-xs">
32
+                    <strong class="text-xs block">{{ $document->company->name }}</strong>
33
+                    @if($formattedAddress = $document->company->getFormattedAddressHtml())
34
+                        {!! $formattedAddress !!}
35
+                    @endif
36
+                </div>
29 37
             </div>
30 38
         </div>
31 39
     </x-company.document-template.header>
32 40
 
33
-    <x-company.document-template.metadata class="default-template-metadata space-y-6">
34
-        <div>
35
-            <h1 class="text-3xl font-light uppercase">{{ $document->header }}</h1>
36
-            @if ($document->subheader)
37
-                <h2 class="text-sm text-gray-600 dark:text-gray-400">{{ $document->subheader }}</h2>
38
-            @endif
39
-        </div>
40
-
41
+    <x-company.document-template.metadata class="default-template-metadata space-y-2">
41 42
         <div class="flex justify-between items-end">
42 43
             <!-- Billing Details -->
43 44
             <div class="text-xs">
44
-                <h3 class="text-gray-600 dark:text-gray-400 font-medium tracking-tight mb-1">BILL TO</h3>
45
-                <p class="text-base font-bold">{{ $document->client->name }}</p>
45
+                <h3 class="text-gray-600 dark:text-gray-400 font-medium mb-1">BILL TO</h3>
46
+                <p class="text-xs font-bold">{{ $document->client->name }}</p>
46 47
                 @if($formattedAddress = $document->client->getFormattedAddressHtml())
47 48
                     {!! $formattedAddress !!}
48 49
                 @endif
@@ -76,7 +77,7 @@
76 77
     <!-- Line Items Table -->
77 78
     <x-company.document-template.line-items class="default-template-line-items">
78 79
         <table class="w-full text-left table-fixed">
79
-            <thead class="text-sm leading-8" style="background: {{ $document->accentColor }}">
80
+            <thead class="text-xs leading-8" style="background: {{ $document->accentColor }}">
80 81
             <tr class="text-white">
81 82
                 <th class="text-left pl-6">{{ $document->columnLabel->items }}</th>
82 83
                 <th class="text-center">{{ $document->columnLabel->units }}</th>
@@ -117,7 +118,9 @@
117 118
             </tr>
118 119
             <tr>
119 120
                 <td class="pl-6" colspan="2"></td>
120
-                <td class="text-right font-semibold border-t-4 border-double">{{ $document->label->amountDue }} ({{ $document->currencyCode }}):</td>
121
+                <td class="text-right font-semibold border-t-4 border-double">{{ $document->label->amountDue }}
122
+                    ({{ $document->currencyCode }}):
123
+                </td>
121 124
                 <td class="text-right border-t-4 border-double pr-6">{{ $document->amountDue }}</td>
122 125
             </tr>
123 126
             </tfoot>
@@ -125,10 +128,16 @@
125 128
     </x-company.document-template.line-items>
126 129
 
127 130
     <!-- Footer Notes -->
128
-    <x-company.document-template.footer class="default-template-footer">
129
-        <p class="px-6">{{ $document->footer }}</p>
130
-        <span class="border-t-2 my-2 border-gray-300 block w-full"></span>
131
-        <h4 class="font-semibold px-6 mb-2">Terms & Conditions</h4>
132
-        <p class="px-6 break-words line-clamp-4">{{ $document->terms }}</p>
131
+    <x-company.document-template.footer class="classic-template-footer min-h-48 flex flex-col text-xs p-6">
132
+        <div>
133
+            <h4 class="font-semibold mb-2">Terms & Conditions</h4>
134
+            <p class="break-words line-clamp-4">{{ $document->terms }}</p>
135
+        </div>
136
+
137
+        @if($document->footer)
138
+            <div class="mt-auto text-center py-4">
139
+                <p class="font-semibold">{{ $document->footer }}</p>
140
+            </div>
141
+        @endif
133 142
     </x-company.document-template.footer>
134 143
 </x-company.document-template.container>

+ 9
- 9
resources/views/filament/company/components/document-templates/modern.blade.php View File

@@ -34,7 +34,7 @@
34 34
     <!-- Company Details -->
35 35
     <x-company.document-template.metadata class="modern-template-metadata space-y-6">
36 36
         <div class="text-xs">
37
-            <h2 class="text-base font-semibold">{{ $document->company->name }}</h2>
37
+            <h2 class="text-xs font-semibold">{{ $document->company->name }}</h2>
38 38
             @if($formattedAddress = $document->company->getFormattedAddressHtml())
39 39
                 {!! $formattedAddress !!}
40 40
             @endif
@@ -42,9 +42,9 @@
42 42
 
43 43
         <div class="flex justify-between items-end">
44 44
             <!-- Billing Details -->
45
-            <div class="text-xs tracking-tight">
46
-                <h3 class="text-gray-600 dark:text-gray-400 font-medium tracking-tight mb-1">BILL TO</h3>
47
-                <p class="text-base font-bold"
45
+            <div class="text-xs">
46
+                <h3 class="text-gray-600 dark:text-gray-400 font-medium mb-1">BILL TO</h3>
47
+                <p class="text-xs font-bold"
48 48
                    style="color: {{ $document->accentColor }}">{{ $document->client->name }}</p>
49 49
 
50 50
                 @if($formattedAddress = $document->client->getFormattedAddressHtml())
@@ -52,7 +52,7 @@
52 52
                 @endif
53 53
             </div>
54 54
 
55
-            <div class="text-xs tracking-tight">
55
+            <div class="text-xs">
56 56
                 <table class="min-w-full">
57 57
                     <tbody>
58 58
                     <tr>
@@ -82,7 +82,7 @@
82 82
     <!-- Line Items Table -->
83 83
     <x-company.document-template.line-items class="modern-template-line-items">
84 84
         <table class="w-full text-left table-fixed">
85
-            <thead class="text-sm leading-8">
85
+            <thead class="text-xs leading-8">
86 86
             <tr class="text-gray-600 dark:text-gray-400">
87 87
                 <th class="text-left pl-6 w-[50%]">{{ $document->columnLabel->items }}</th>
88 88
                 <th class="text-center w-[10%]">{{ $document->columnLabel->units }}</th>
@@ -90,7 +90,7 @@
90 90
                 <th class="text-right pr-6 w-[20%]">{{ $document->columnLabel->amount }}</th>
91 91
             </tr>
92 92
             </thead>
93
-            <tbody class="text-xs tracking-tight border-y-2">
93
+            <tbody class="text-xs border-y-2">
94 94
             @foreach($document->lineItems as $index => $item)
95 95
                 <tr @class(['bg-gray-100 dark:bg-gray-800' => $index % 2 === 0])>
96 96
                     <td class="text-left pl-6 font-semibold py-2">
@@ -105,7 +105,7 @@
105 105
                 </tr>
106 106
             @endforeach
107 107
             </tbody>
108
-            <tfoot class="text-xs tracking-tight">
108
+            <tfoot class="text-xs">
109 109
             <tr>
110 110
                 <td class="pl-6 py-1" colspan="2"></td>
111 111
                 <td class="text-right font-semibold py-1">Subtotal:</td>
@@ -146,7 +146,7 @@
146 146
     </x-company.document-template.line-items>
147 147
 
148 148
     <!-- Footer Notes -->
149
-    <x-company.document-template.footer class="modern-template-footer tracking-tight">
149
+    <x-company.document-template.footer class="modern-template-footer text-xs">
150 150
         <h4 class="font-semibold px-6" style="color: {{ $document->accentColor }}">Terms & Conditions</h4>
151 151
         <span class="border-t-2 my-2 border-gray-300 block w-full"></span>
152 152
         <div class="flex justify-between space-x-4 px-6">

+ 39
- 36
resources/views/filament/infolists/components/document-templates/classic.blade.php View File

@@ -1,23 +1,23 @@
1 1
 <x-company.document-template.container class="classic-template-container">
2 2
     <!-- Header Section -->
3
-    <x-company.document-template.header class="default-template-header">
4
-        <div class="w-2/3 text-left ml-6">
5
-            <div class="text-sm tracking-tight">
6
-                <h2 class="text-lg font-semibold">{{ $document->company->name }}</h2>
3
+    <x-company.document-template.header class="classic-template-header">
4
+        <div class="w-2/3 text-left">
5
+            <div class="text-sm">
6
+                <strong class="text-sm block">{{ $document->company->name }}</strong>
7 7
                 @if($formattedAddress = $document->company->getFormattedAddressHtml())
8 8
                     {!! $formattedAddress !!}
9 9
                 @endif
10 10
             </div>
11 11
         </div>
12 12
 
13
-        <div class="w-1/3 flex justify-end mr-6">
13
+        <div class="w-1/3 flex justify-end">
14 14
             @if($document->logo && $document->showLogo)
15 15
                 <x-company.document-template.logo :src="$document->logo"/>
16 16
             @endif
17 17
         </div>
18 18
     </x-company.document-template.header>
19 19
 
20
-    <x-company.document-template.metadata class="classic-template-metadata space-y-8">
20
+    <x-company.document-template.metadata class="classic-template-metadata space-y-4">
21 21
         <div class="items-center flex">
22 22
             <hr class="grow-[2] py-0.5 border-solid border-y-2" style="border-color: {{ $document->accentColor }};">
23 23
             <x-icons.document-header-decoration
@@ -27,29 +27,33 @@
27 27
             />
28 28
             <hr class="grow-[2] py-0.5 border-solid border-y-2" style="border-color: {{ $document->accentColor }};">
29 29
         </div>
30
-        <div class="mt-2 text-base text-center text-gray-600 dark:text-gray-400">{{ $document->subheader }}</div>
30
+        @if ($document->subheader)
31
+            <p class="text-sm text-center text-gray-600 dark:text-gray-400">{{ $document->subheader }}</p>
32
+        @endif
31 33
 
32 34
         <div class="flex justify-between items-end">
33 35
             <!-- Billing Details -->
34
-            <div class="text-sm tracking-tight">
35
-                <h3 class="text-gray-600 dark:text-gray-400 font-medium tracking-tight mb-1">BILL TO</h3>
36
-                <p class="text-base font-bold">{{ $document->client->name }}</p>
36
+            <div class="text-sm">
37
+                <h3 class="text-gray-600 dark:text-gray-400 font-medium mb-1">BILL TO</h3>
38
+                <p class="text-sm font-bold">{{ $document->client->name }}</p>
37 39
                 @if($formattedAddress = $document->client->getFormattedAddressHtml())
38 40
                     {!! $formattedAddress !!}
39 41
                 @endif
40 42
             </div>
41 43
 
42
-            <div class="text-sm tracking-tight">
44
+            <div class="text-sm">
43 45
                 <table class="min-w-full">
44 46
                     <tbody>
45 47
                     <tr>
46 48
                         <td class="font-semibold text-right pr-2">{{ $document->label->number }}:</td>
47 49
                         <td class="text-left pl-2">{{ $document->number }}</td>
48 50
                     </tr>
49
-                    <tr>
50
-                        <td class="font-semibold text-right pr-2">{{ $document->label->referenceNumber }}:</td>
51
-                        <td class="text-left pl-2">{{ $document->referenceNumber }}</td>
52
-                    </tr>
51
+                    @if($document->referenceNumber)
52
+                        <tr>
53
+                            <td class="font-semibold text-right pr-2">{{ $document->label->referenceNumber }}:</td>
54
+                            <td class="text-left pl-2">{{ $document->referenceNumber }}</td>
55
+                        </tr>
56
+                    @endif
53 57
                     <tr>
54 58
                         <td class="font-semibold text-right pr-2">{{ $document->label->date }}:</td>
55 59
                         <td class="text-left pl-2">{{ $document->date }}</td>
@@ -65,20 +69,20 @@
65 69
     </x-company.document-template.metadata>
66 70
 
67 71
     <!-- Line Items -->
68
-    <x-company.document-template.line-items class="classic-template-line-items">
72
+    <x-company.document-template.line-items class="classic-template-line-items px-6">
69 73
         <table class="w-full text-left table-fixed">
70 74
             <thead class="text-sm leading-relaxed">
71 75
             <tr>
72
-                <th class="text-left pl-6 w-[50%] py-4">{{ $document->columnLabel->items }}</th>
76
+                <th class="text-left w-[50%] py-4">{{ $document->columnLabel->items }}</th>
73 77
                 <th class="text-center w-[10%] py-4">{{ $document->columnLabel->units }}</th>
74 78
                 <th class="text-right w-[20%] py-4">{{ $document->columnLabel->price }}</th>
75
-                <th class="text-right pr-6 w-[20%] py-4">{{ $document->columnLabel->amount }}</th>
79
+                <th class="text-right w-[20%] py-4">{{ $document->columnLabel->amount }}</th>
76 80
             </tr>
77 81
             </thead>
78
-            <tbody class="text-sm tracking-tight border-y-2 border-dotted border-gray-300">
82
+            <tbody class="text-sm border-y-2 border-dotted border-gray-300">
79 83
             @foreach($document->lineItems as $item)
80 84
                 <tr>
81
-                    <td class="text-left pl-6 font-semibold py-3">
85
+                    <td class="text-left font-semibold py-3">
82 86
                         {{ $item->name }}
83 87
                         @if($item->description)
84 88
                             <div class="text-gray-600 font-normal line-clamp-2 mt-1">{{ $item->description }}</div>
@@ -86,32 +90,31 @@
86 90
                     </td>
87 91
                     <td class="text-center py-3">{{ $item->quantity }}</td>
88 92
                     <td class="text-right py-3">{{ $item->unitPrice }}</td>
89
-                    <td class="text-right pr-6 py-3">{{ $item->subtotal }}</td>
93
+                    <td class="text-right py-3">{{ $item->subtotal }}</td>
90 94
                 </tr>
91 95
             @endforeach
92 96
             </tbody>
93 97
         </table>
94 98
 
95 99
         <!-- Financial Details and Notes -->
96
-        <div class="flex justify-between text-sm tracking-tight space-x-1">
100
+        <div class="flex justify-between text-sm space-x-1 pt-4">
97 101
             <!-- Notes Section -->
98
-            <div class="w-[60%] border border-dashed border-gray-300 p-2 mt-4">
99
-                <h4 class="font-semibold mb-2">Notes</h4>
100
-                <p>{{ $document->footer }}</p>
102
+            <div class="w-[60%] py-2">
103
+                <p class="font-semibold">{{ $document->footer }}</p>
101 104
             </div>
102 105
 
103 106
             <!-- Financial Summary -->
104
-            <div class="w-[40%] mt-2">
105
-                <table class="w-full table-fixed">
106
-                    <tbody class="text-sm tracking-tight">
107
+            <div class="w-[40%]">
108
+                <table class="w-full table-fixed whitespace-nowrap">
109
+                    <tbody class="text-sm">
107 110
                     <tr>
108 111
                         <td class="text-right font-semibold py-2">Subtotal:</td>
109
-                        <td class="text-right pr-6 py-2">{{ $document->subtotal }}</td>
112
+                        <td class="text-right py-2">{{ $document->subtotal }}</td>
110 113
                     </tr>
111 114
                     @if($document->discount)
112 115
                         <tr class="text-success-800 dark:text-success-600">
113 116
                             <td class="text-right py-2">Discount:</td>
114
-                            <td class="text-right pr-6 py-2">
117
+                            <td class="text-right py-2">
115 118
                                 ({{ $document->discount }})
116 119
                             </td>
117 120
                         </tr>
@@ -119,19 +122,19 @@
119 122
                     @if($document->tax)
120 123
                         <tr>
121 124
                             <td class="text-right py-2">Tax:</td>
122
-                            <td class="text-right pr-6 py-2">{{ $document->tax }}</td>
125
+                            <td class="text-right py-2">{{ $document->tax }}</td>
123 126
                         </tr>
124 127
                     @endif
125 128
                     <tr>
126 129
                         <td class="text-right font-semibold border-t py-2">Total:</td>
127
-                        <td class="text-right border-t pr-6 py-2">{{ $document->total }}</td>
130
+                        <td class="text-right border-t py-2">{{ $document->total }}</td>
128 131
                     </tr>
129 132
                     @if($document->amountDue)
130 133
                         <tr>
131 134
                             <td class="text-right font-semibold border-t-4 border-double py-2">{{ $document->label->amountDue }}
132 135
                                 ({{ $document->currencyCode }}):
133 136
                             </td>
134
-                            <td class="text-right border-t-4 border-double pr-6 py-2">{{ $document->amountDue }}</td>
137
+                            <td class="text-right border-t-4 border-double py-2">{{ $document->amountDue }}</td>
135 138
                         </tr>
136 139
                     @endif
137 140
                     </tbody>
@@ -141,8 +144,8 @@
141 144
     </x-company.document-template.line-items>
142 145
 
143 146
     <!-- Footer -->
144
-    <x-company.document-template.footer class="classic-template-footer tracking-tight min-h-48">
145
-        <h4 class="font-semibold px-6 mb-2 text-sm">Terms & Conditions</h4>
146
-        <p class="px-6 break-words line-clamp-4 text-sm">{{ $document->terms }}</p>
147
+    <x-company.document-template.footer class="classic-template-footer min-h-48 p-6 text-sm">
148
+        <h4 class="font-semibold mb-2">Terms & Conditions</h4>
149
+        <p class="break-words line-clamp-4">{{ $document->terms }}</p>
147 150
     </x-company.document-template.footer>
148 151
 </x-company.document-template.container>

+ 34
- 27
resources/views/filament/infolists/components/document-templates/default.blade.php View File

@@ -1,41 +1,42 @@
1 1
 <x-company.document-template.container class="default-template-container">
2 2
 
3
-    <x-company.document-template.header class="default-template-header border-b-2 p-6 pb-4">
4
-        <div class="w-2/3">
3
+    <x-company.document-template.header class="default-template-header border-b">
4
+        <div class="w-1/3">
5 5
             @if($document->logo && $document->showLogo)
6 6
                 <x-company.document-template.logo :src="$document->logo"/>
7 7
             @endif
8 8
         </div>
9 9
 
10
-        <div class="w-1/3 text-right">
11
-            <div class="text-sm tracking-tight">
12
-                <h2 class="text-lg font-semibold">{{ $document->company->name }}</h2>
13
-                @if($formattedAddress = $document->company->getFormattedAddressHtml())
14
-                    {!! $formattedAddress !!}
15
-                @endif
10
+        <div class="w-2/3 text-right">
11
+            <div class="space-y-4">
12
+                <div>
13
+                    <h1 class="text-3xl font-light uppercase">{{ $document->header }}</h1>
14
+                    @if ($document->subheader)
15
+                        <p class="text-sm text-gray-600 dark:text-gray-400">{{ $document->subheader }}</p>
16
+                    @endif
17
+                </div>
18
+                <div class="text-sm">
19
+                    <strong class="text-sm block">{{ $document->company->name }}</strong>
20
+                    @if($formattedAddress = $document->company->getFormattedAddressHtml())
21
+                        {!! $formattedAddress !!}
22
+                    @endif
23
+                </div>
16 24
             </div>
17 25
         </div>
18 26
     </x-company.document-template.header>
19 27
 
20
-    <x-company.document-template.metadata class="default-template-metadata space-y-8">
21
-        <div>
22
-            <h1 class="text-4xl font-light uppercase">{{ $document->header }}</h1>
23
-            @if ($document->subheader)
24
-                <h2 class="text-base text-gray-600 dark:text-gray-400">{{ $document->subheader }}</h2>
25
-            @endif
26
-        </div>
27
-
28
+    <x-company.document-template.metadata class="default-template-metadata space-y-4">
28 29
         <div class="flex justify-between items-end">
29 30
             <!-- Billing Details -->
30
-            <div class="text-sm tracking-tight">
31
-                <h3 class="text-gray-600 dark:text-gray-400 font-medium tracking-tight mb-1">BILL TO</h3>
32
-                <p class="text-base font-bold">{{ $document->client->name }}</p>
31
+            <div class="text-sm">
32
+                <h3 class="text-gray-600 dark:text-gray-400 font-medium mb-1">BILL TO</h3>
33
+                <p class="text-sm font-bold">{{ $document->client->name }}</p>
33 34
                 @if($formattedAddress = $document->client->getFormattedAddressHtml())
34 35
                     {!! $formattedAddress !!}
35 36
                 @endif
36 37
             </div>
37 38
 
38
-            <div class="text-sm tracking-tight">
39
+            <div class="text-sm">
39 40
                 <table class="min-w-full">
40 41
                     <tbody>
41 42
                     <tr>
@@ -73,7 +74,7 @@
73 74
                 <th class="text-right pr-6 w-[20%] py-2">{{ $document->columnLabel->amount }}</th>
74 75
             </tr>
75 76
             </thead>
76
-            <tbody class="text-sm tracking-tight border-b-2 border-gray-300">
77
+            <tbody class="text-sm border-b-2 border-gray-300">
77 78
             @foreach($document->lineItems as $item)
78 79
                 <tr>
79 80
                     <td class="text-left pl-6 font-semibold py-3">
@@ -88,7 +89,7 @@
88 89
                 </tr>
89 90
             @endforeach
90 91
             </tbody>
91
-            <tfoot class="text-sm tracking-tight summary-section">
92
+            <tfoot class="text-sm summary-section">
92 93
             <tr>
93 94
                 <td class="pl-6 py-2" colspan="2"></td>
94 95
                 <td class="text-right font-semibold py-2">Subtotal:</td>
@@ -129,10 +130,16 @@
129 130
     </x-company.document-template.line-items>
130 131
 
131 132
     <!-- Footer Notes -->
132
-    <x-company.document-template.footer class="default-template-footer tracking-tight">
133
-        <p class="px-6 text-sm">{{ $document->footer }}</p>
134
-        <span class="border-t-2 my-2 border-gray-300 block w-full"></span>
135
-        <h4 class="font-semibold px-6 mb-2 text-sm">Terms & Conditions</h4>
136
-        <p class="px-6 break-words line-clamp-4 text-sm">{{ $document->terms }}</p>
133
+    <x-company.document-template.footer class="classic-template-footer min-h-48 flex flex-col text-sm p-6">
134
+        <div>
135
+            <h4 class="font-semibold mb-2">Terms & Conditions</h4>
136
+            <p class="break-words line-clamp-4">{{ $document->terms }}</p>
137
+        </div>
138
+
139
+        @if($document->footer)
140
+            <div class="mt-auto text-center py-4">
141
+                <p class="font-semibold">{{ $document->footer }}</p>
142
+            </div>
143
+        @endif
137 144
     </x-company.document-template.footer>
138 145
 </x-company.document-template.container>

+ 7
- 7
resources/views/filament/infolists/components/document-templates/modern.blade.php View File

@@ -28,9 +28,9 @@
28 28
 
29 29
         <div class="flex justify-between items-end">
30 30
             <!-- Billing Details -->
31
-            <div class="text-sm tracking-tight">
32
-                <h3 class="text-gray-600 dark:text-gray-400 font-medium tracking-tight mb-1">BILL TO</h3>
33
-                <p class="text-base font-bold"
31
+            <div class="text-sm">
32
+                <h3 class="text-gray-600 dark:text-gray-400 font-medium mb-1">BILL TO</h3>
33
+                <p class="text-sm font-bold"
34 34
                    style="color: {{ $document->accentColor }}">{{ $document->client->name }}</p>
35 35
 
36 36
                 @if($formattedAddress = $document->client->getFormattedAddressHtml())
@@ -38,7 +38,7 @@
38 38
                 @endif
39 39
             </div>
40 40
 
41
-            <div class="text-sm tracking-tight">
41
+            <div class="text-sm">
42 42
                 <table class="min-w-full">
43 43
                     <tbody>
44 44
                     <tr>
@@ -76,7 +76,7 @@
76 76
                 <th class="text-right pr-6 w-[20%] py-4">{{ $document->columnLabel->amount }}</th>
77 77
             </tr>
78 78
             </thead>
79
-            <tbody class="text-sm tracking-tight border-y-2">
79
+            <tbody class="text-sm border-y-2">
80 80
             @foreach($document->lineItems as $index => $item)
81 81
                 <tr @class(['bg-gray-100 dark:bg-gray-800' => $index % 2 === 0])>
82 82
                     <td class="text-left pl-6 font-semibold py-3">
@@ -91,7 +91,7 @@
91 91
                 </tr>
92 92
             @endforeach
93 93
             </tbody>
94
-            <tfoot class="text-sm tracking-tight summary-section">
94
+            <tfoot class="text-sm summary-section">
95 95
             <tr>
96 96
                 <td class="pl-6 py-2" colspan="2"></td>
97 97
                 <td class="text-right font-semibold py-2">Subtotal:</td>
@@ -132,7 +132,7 @@
132 132
     </x-company.document-template.line-items>
133 133
 
134 134
     <!-- Footer Notes -->
135
-    <x-company.document-template.footer class="modern-template-footer tracking-tight">
135
+    <x-company.document-template.footer class="modern-template-footer">
136 136
         <h4 class="font-semibold px-6 text-sm" style="color: {{ $document->accentColor }}">
137 137
             Terms & Conditions
138 138
         </h4>

+ 0
- 358
resources/views/vendor/filament/components/modal/index.blade.php View File

@@ -1,358 +0,0 @@
1
-@php
2
-    use Filament\Support\Enums\Alignment;
3
-    use Filament\Support\Enums\MaxWidth;
4
-@endphp
5
-
6
-@props([
7
-    'alignment' => Alignment::Start,
8
-    'ariaLabelledby' => null,
9
-    'closeButton' => \Filament\Support\View\Components\Modal::$hasCloseButton,
10
-    'closeByClickingAway' => \Filament\Support\View\Components\Modal::$isClosedByClickingAway,
11
-    'closeEventName' => 'close-modal',
12
-    'description' => null,
13
-    'displayClasses' => 'inline-block',
14
-    'footer' => null,
15
-    'footerActions' => [],
16
-    'footerActionsAlignment' => Alignment::Start,
17
-    'header' => null,
18
-    'heading' => null,
19
-    'icon' => null,
20
-    'iconAlias' => null,
21
-    'iconColor' => 'primary',
22
-    'id' => null,
23
-    'openEventName' => 'open-modal',
24
-    'slideOver' => false,
25
-    'stickyFooter' => false,
26
-    'stickyHeader' => false,
27
-    'trigger' => null,
28
-    'visible' => true,
29
-    'width' => 'sm',
30
-])
31
-
32
-@php
33
-    if (! $alignment instanceof Alignment) {
34
-        $alignment = filled($alignment) ? (Alignment::tryFrom($alignment) ?? $alignment) : null;
35
-    }
36
-
37
-    if (! $footerActionsAlignment instanceof Alignment) {
38
-        $footerActionsAlignment = filled($footerActionsAlignment) ? (Alignment::tryFrom($footerActionsAlignment) ?? $footerActionsAlignment) : null;
39
-    }
40
-
41
-    if (! $width instanceof MaxWidth) {
42
-        $width = filled($width) ? (MaxWidth::tryFrom($width) ?? $width) : null;
43
-    }
44
-
45
-    $closeEventHandler = filled($id) ? '$dispatch(' . \Illuminate\Support\Js::from($closeEventName) . ', { id: ' . \Illuminate\Support\Js::from($id) . ' })' : 'close()';
46
-@endphp
47
-
48
-<div
49
-    @if ($ariaLabelledby)
50
-        aria-labelledby="{{ $ariaLabelledby }}"
51
-    @elseif ($heading)
52
-        aria-labelledby="{{ "{$id}.heading" }}"
53
-    @endif
54
-    aria-modal="true"
55
-    role="dialog"
56
-    x-data="{
57
-        isOpen: false,
58
-
59
-        livewire: null,
60
-
61
-        close: function () {
62
-            this.isOpen = false
63
-
64
-            this.$refs.modalContainer.dispatchEvent(
65
-                new CustomEvent('modal-closed', { id: '{{ $id }}' }),
66
-            )
67
-
68
-            {{-- this.$nextTick(() => {
69
-                if (document.getElementsByClassName('fi-modal-open').length) {
70
-                    return
71
-                }
72
-
73
-                window.clearAllBodyScrollLocks()
74
-            }) --}}
75
-        },
76
-
77
-        open: function () {
78
-            this.isOpen = true
79
-
80
-            {{-- window.clearAllBodyScrollLocks()
81
-            window.disableBodyScroll(this.$root) --}}
82
-
83
-            this.$refs.modalContainer.dispatchEvent(
84
-                new CustomEvent('modal-opened', { id: '{{ $id }}' }),
85
-            )
86
-        },
87
-    }"
88
-    @if ($id)
89
-        x-on:{{ $closeEventName }}.window="if ($event.detail.id === '{{ $id }}') close()"
90
-        x-on:{{ $openEventName }}.window="if ($event.detail.id === '{{ $id }}') open()"
91
-    @endif
92
-    x-trap.noscroll="isOpen"
93
-    x-bind:class="{
94
-        'fi-modal-open': isOpen,
95
-    }"
96
-    @class([
97
-        'fi-modal',
98
-        'fi-width-screen' => $width === MaxWidth::Screen,
99
-        $displayClasses,
100
-    ])
101
->
102
-    @if ($trigger)
103
-        <div
104
-            x-on:click="open"
105
-            {{ $trigger->attributes->class(['fi-modal-trigger flex cursor-pointer']) }}
106
-        >
107
-            {{ $trigger }}
108
-        </div>
109
-    @endif
110
-
111
-    <div
112
-        x-cloak
113
-        x-show="isOpen"
114
-    >
115
-        <div
116
-            aria-hidden="true"
117
-            x-show="isOpen"
118
-            x-transition.duration.300ms.opacity
119
-            @class([
120
-                'fi-modal-close-overlay fixed inset-0 z-40 bg-gray-950/50 dark:bg-gray-950/75',
121
-            ])
122
-        ></div>
123
-
124
-        <div
125
-            @class([
126
-                'fixed inset-0 z-40',
127
-                'overflow-hidden' => ! ($slideOver || ($width === MaxWidth::Screen)),
128
-                'cursor-pointer' => $closeByClickingAway,
129
-            ])
130
-        >
131
-            <div
132
-                x-ref="modalContainer"
133
-                @if ($closeByClickingAway)
134
-                    x-on:click.self="{{ $closeEventHandler }}"
135
-                @endif
136
-                {{
137
-                    $attributes->class([
138
-                        'relative min-h-full flex items-start justify-center',
139
-                        'mb-auto mt-8 p-4' => ! ($slideOver || ($width === MaxWidth::Screen)),
140
-                    ])
141
-                }}
142
-            >
143
-                <div
144
-                    x-data="{ isShown: false }"
145
-                    x-init="
146
-                        $nextTick(() => {
147
-                            isShown = isOpen
148
-                            $watch('isOpen', () => (isShown = isOpen))
149
-                        })
150
-                    "
151
-                    x-on:keydown.window.escape="{{ $closeEventHandler }}"
152
-                    x-show="isShown"
153
-                    x-transition:enter="duration-300"
154
-                    x-transition:leave="duration-300"
155
-                    @if ($width === MaxWidth::Screen)
156
-                    @elseif ($slideOver)
157
-                        x-transition:enter-start="translate-x-full rtl:-translate-x-full"
158
-                    x-transition:enter-end="translate-x-0"
159
-                    x-transition:leave-start="translate-x-0"
160
-                    x-transition:leave-end="translate-x-full rtl:-translate-x-full"
161
-                    @else
162
-                        x-transition:enter-start="scale-95 opacity-0"
163
-                    x-transition:enter-end="scale-100 opacity-100"
164
-                    x-transition:leave-start="scale-100 opacity-100"
165
-                    x-transition:leave-end="scale-95 opacity-0"
166
-                    @endif
167
-                    @class([
168
-                        'fi-modal-window pointer-events-auto relative flex w-full cursor-default flex-col bg-white shadow-xl ring-1 ring-gray-950/5 dark:bg-gray-900 dark:ring-white/10',
169
-                        'fi-modal-slide-over-window ms-auto overflow-y-auto' => $slideOver,
170
-                        // Using an arbitrary value instead of the h-dvh class that was added in Tailwind CSS v3.4.0
171
-                        // to ensure compatibility with custom themes that may use an older version of Tailwind CSS.
172
-                        'h-[100dvh]' => $slideOver || ($width === MaxWidth::Screen),
173
-                        'mx-auto rounded-xl' => ! ($slideOver || ($width === MaxWidth::Screen)),
174
-                        'hidden' => ! $visible,
175
-                        match ($width) {
176
-                            MaxWidth::ExtraSmall => 'max-w-xs',
177
-                            MaxWidth::Small => 'max-w-sm',
178
-                            MaxWidth::Medium => 'max-w-md',
179
-                            MaxWidth::Large => 'max-w-lg',
180
-                            MaxWidth::ExtraLarge => 'max-w-xl',
181
-                            MaxWidth::TwoExtraLarge => 'max-w-2xl',
182
-                            MaxWidth::ThreeExtraLarge => 'max-w-3xl',
183
-                            MaxWidth::FourExtraLarge => 'max-w-4xl',
184
-                            MaxWidth::FiveExtraLarge => 'max-w-5xl',
185
-                            MaxWidth::SixExtraLarge => 'max-w-6xl',
186
-                            MaxWidth::SevenExtraLarge => 'max-w-7xl',
187
-                            MaxWidth::Full => 'max-w-full',
188
-                            MaxWidth::MinContent => 'max-w-min',
189
-                            MaxWidth::MaxContent => 'max-w-max',
190
-                            MaxWidth::FitContent => 'max-w-fit',
191
-                            MaxWidth::Prose => 'max-w-prose',
192
-                            MaxWidth::ScreenSmall => 'max-w-screen-sm',
193
-                            MaxWidth::ScreenMedium => 'max-w-screen-md',
194
-                            MaxWidth::ScreenLarge => 'max-w-screen-lg',
195
-                            MaxWidth::ScreenExtraLarge => 'max-w-screen-xl',
196
-                            MaxWidth::ScreenTwoExtraLarge => 'max-w-screen-2xl',
197
-                            MaxWidth::Screen => 'fixed inset-0',
198
-                            default => $width,
199
-                        },
200
-                    ])
201
-                >
202
-                    @if ($heading || $header)
203
-                        <div
204
-                            @class([
205
-                                'fi-modal-header flex px-6 pt-6',
206
-                                'fi-sticky sticky top-0 z-10 border-b border-gray-200 bg-white pb-6 dark:border-white/10 dark:bg-gray-900' => $stickyHeader,
207
-                                'rounded-t-xl' => $stickyHeader && ! ($slideOver || ($width === MaxWidth::Screen)),
208
-                                match ($alignment) {
209
-                                    Alignment::Start, Alignment::Left => 'gap-x-5',
210
-                                    Alignment::Center => 'flex-col',
211
-                                    default => null,
212
-                                },
213
-                            ])
214
-                        >
215
-                            @if ($closeButton)
216
-                                <div
217
-                                    @class([
218
-                                        'absolute',
219
-                                        'end-4 top-4' => ! $slideOver,
220
-                                        'end-6 top-6' => $slideOver,
221
-                                    ])
222
-                                >
223
-                                    <x-filament::icon-button
224
-                                        color="gray"
225
-                                        icon="heroicon-o-x-mark"
226
-                                        icon-alias="modal.close-button"
227
-                                        icon-size="lg"
228
-                                        :label="__('filament::components/modal.actions.close.label')"
229
-                                        tabindex="-1"
230
-                                        :x-on:click="$closeEventHandler"
231
-                                        class="fi-modal-close-btn"
232
-                                    />
233
-                                </div>
234
-                            @endif
235
-
236
-                            @if ($header)
237
-                                {{ $header }}
238
-                            @else
239
-                                @if ($icon)
240
-                                    <div
241
-                                        @class([
242
-                                            'mb-5 flex items-center justify-center' => $alignment === Alignment::Center,
243
-                                        ])
244
-                                    >
245
-                                        <div
246
-                                            @class([
247
-                                                'rounded-full',
248
-                                                match ($iconColor) {
249
-                                                    'gray' => 'fi-color-gray bg-gray-100 dark:bg-gray-500/20',
250
-                                                    default => 'fi-color-custom bg-custom-100 dark:bg-custom-500/20',
251
-                                                },
252
-                                                match ($alignment) {
253
-                                                    Alignment::Start, Alignment::Left => 'p-2',
254
-                                                    Alignment::Center => 'p-3',
255
-                                                    default => null,
256
-                                                },
257
-                                            ])
258
-                                            @style([
259
-                                                \Filament\Support\get_color_css_variables(
260
-                                                    $iconColor,
261
-                                                    shades: [100, 400, 500, 600],
262
-                                                    alias: 'modal.icon',
263
-                                                ) => $iconColor !== 'gray',
264
-                                            ])
265
-                                        >
266
-                                            <x-filament::icon
267
-                                                :alias="$iconAlias"
268
-                                                :icon="$icon"
269
-                                                @class([
270
-                                                    'fi-modal-icon h-6 w-6',
271
-                                                    match ($iconColor) {
272
-                                                        'gray' => 'text-gray-500 dark:text-gray-400',
273
-                                                        default => 'text-custom-600 dark:text-custom-400',
274
-                                                    },
275
-                                                ])
276
-                                            />
277
-                                        </div>
278
-                                    </div>
279
-                                @endif
280
-
281
-                                <div
282
-                                    @class([
283
-                                        'text-center' => $alignment === Alignment::Center,
284
-                                    ])
285
-                                >
286
-                                    <x-filament::modal.heading>
287
-                                        {{ $heading }}
288
-                                    </x-filament::modal.heading>
289
-
290
-                                    @if (filled($description))
291
-                                        <x-filament::modal.description
292
-                                            class="mt-2"
293
-                                        >
294
-                                            {{ $description }}
295
-                                        </x-filament::modal.description>
296
-                                    @endif
297
-                                </div>
298
-                            @endif
299
-                        </div>
300
-                    @endif
301
-
302
-                    @if (! \Filament\Support\is_slot_empty($slot))
303
-                        <div
304
-                            @class([
305
-                                'fi-modal-content flex flex-col gap-y-4 py-6 overflow-y-auto',
306
-                                'max-h-[calc(80vh-4rem)]' => ! ($slideOver || ($width === MaxWidth::Screen)),
307
-                                'flex-1' => ($width === MaxWidth::Screen) || $slideOver,
308
-                                'pe-6 ps-[5.25rem]' => $icon && ($alignment === Alignment::Start),
309
-                                'px-6' => ! ($icon && ($alignment === Alignment::Start)),
310
-                            ])
311
-                        >
312
-                            {{ $slot }}
313
-                        </div>
314
-                    @endif
315
-
316
-                    @if ((! \Filament\Support\is_slot_empty($footer)) || (is_array($footerActions) && count($footerActions)) || (! is_array($footerActions) && (! \Filament\Support\is_slot_empty($footerActions))))
317
-                        <div
318
-                            @class([
319
-                                'fi-modal-footer w-full',
320
-                                'pe-6 ps-[5.25rem]' => $icon && ($alignment === Alignment::Start) && ($footerActionsAlignment !== Alignment::Center) && (! $stickyFooter),
321
-                                'px-6' => ! ($icon && ($alignment === Alignment::Start) && ($footerActionsAlignment !== Alignment::Center) && (! $stickyFooter)),
322
-                                'fi-sticky sticky bottom-0 border-t border-gray-200 bg-white py-5 dark:border-white/10 dark:bg-gray-900' => $stickyFooter,
323
-                                'rounded-b-xl' => $stickyFooter && ! ($slideOver || ($width === MaxWidth::Screen)),
324
-                                'pb-6' => ! $stickyFooter,
325
-                                'mt-6' => (! $stickyFooter) && \Filament\Support\is_slot_empty($slot),
326
-                                'mt-auto' => $slideOver,
327
-                            ])
328
-                        >
329
-                            @if (! \Filament\Support\is_slot_empty($footer))
330
-                                {{ $footer }}
331
-                            @else
332
-                                <div
333
-                                    @class([
334
-                                        'fi-modal-footer-actions gap-3',
335
-                                        match ($footerActionsAlignment) {
336
-                                            Alignment::Start, Alignment::Left => 'flex flex-wrap items-center',
337
-                                            Alignment::Center => 'flex flex-col-reverse sm:grid sm:grid-cols-[repeat(auto-fit,minmax(0,1fr))]',
338
-                                            Alignment::End, Alignment::Right => 'flex flex-row-reverse flex-wrap items-center',
339
-                                            default => null,
340
-                                        },
341
-                                    ])
342
-                                >
343
-                                    @if (is_array($footerActions))
344
-                                        @foreach ($footerActions as $action)
345
-                                            {{ $action }}
346
-                                        @endforeach
347
-                                    @else
348
-                                        {{ $footerActions }}
349
-                                    @endif
350
-                                </div>
351
-                            @endif
352
-                        </div>
353
-                    @endif
354
-                </div>
355
-            </div>
356
-        </div>
357
-    </div>
358
-</div>

Loading…
Cancel
Save