rodzic
commit
7caab11370

+ 7
- 10
app/Http/Controllers/DashboardController.php Wyświetl plik

2
 
2
 
3
 namespace App\Http\Controllers;
3
 namespace App\Http\Controllers;
4
 
4
 
5
-use App\Services\ProductService;
6
-use App\Services\PurchaseService;
7
-use App\Services\SaleService;
5
+use App\Services\DashboardService;
6
+use App\Services\QueryService;
8
 use Illuminate\Http\Request;
7
 use Illuminate\Http\Request;
9
 
8
 
10
 class DashboardController extends Controller
9
 class DashboardController extends Controller
17
      */
16
      */
18
     public function __invoke(Request $request)
17
     public function __invoke(Request $request)
19
     {
18
     {
19
+        // dd(QueryService::statisticDualYear("purchase_details", "purchases"));
20
+
20
         return inertia("Dashboards/Index", [
21
         return inertia("Dashboards/Index", [
21
-            "productCounts" => [
22
-                SaleService::saleAmount(),
23
-                PurchaseService::purchaseAmount(),
24
-                ProductService::productAmount(),
25
-                ProductService::stockProductAmount(),
26
-            ],
27
-            "productFavorites" => SaleService::bestSelling(),
22
+            "productAmount" => DashboardService::productAmount(),
23
+            "productFavorites" => DashboardService::productFavorites(),
24
+            "salePurchaseStatistic" => DashboardService::salePurchaseStatistic(),
28
         ]);
25
         ]);
29
     }
26
     }
30
 }
27
 }

+ 2
- 2
app/Http/Controllers/PurchaseController.php Wyświetl plik

9
 use App\Models\Supplier;
9
 use App\Models\Supplier;
10
 use App\Models\StockProduct;
10
 use App\Models\StockProduct;
11
 use App\Models\PurchaseDetail;
11
 use App\Models\PurchaseDetail;
12
-use App\Services\HelperService;
13
 use Barryvdh\DomPDF\Facade\Pdf;
12
 use Barryvdh\DomPDF\Facade\Pdf;
14
 use Illuminate\Support\Facades\DB;
13
 use Illuminate\Support\Facades\DB;
15
 use Illuminate\Database\QueryException;
14
 use Illuminate\Database\QueryException;
16
 use App\Http\Requests\Purchase\StorePurchaseRequest;
15
 use App\Http\Requests\Purchase\StorePurchaseRequest;
17
 use App\Http\Requests\Purchase\UpdatePurchaseRequest;
16
 use App\Http\Requests\Purchase\UpdatePurchaseRequest;
18
 use App\Models\Company;
17
 use App\Models\Company;
18
+use App\Services\FunctionService;
19
 use App\Services\PurchaseService;
19
 use App\Services\PurchaseService;
20
 
20
 
21
 class PurchaseController extends Controller
21
 class PurchaseController extends Controller
45
                         "name" => $purchase->supplier->name,
45
                         "name" => $purchase->supplier->name,
46
                         "phone" => $purchase->supplier->phone,
46
                         "phone" => $purchase->supplier->phone,
47
                         "email" => $purchase->supplier->email,
47
                         "email" => $purchase->supplier->email,
48
-                        "price" => HelperService::rupiahFormat(
48
+                        "price" => FunctionService::rupiahFormat(
49
                             PurchaseService::totalPrice($purchase)
49
                             PurchaseService::totalPrice($purchase)
50
                         ),
50
                         ),
51
                         "status" => $purchase->status,
51
                         "status" => $purchase->status,

+ 2
- 2
app/Http/Controllers/SalesController.php Wyświetl plik

7
 use Inertia\Inertia;
7
 use Inertia\Inertia;
8
 use App\Models\Customer;
8
 use App\Models\Customer;
9
 use App\Models\StockProduct;
9
 use App\Models\StockProduct;
10
-use App\Services\HelperService;
11
 use Illuminate\Support\Facades\DB;
10
 use Illuminate\Support\Facades\DB;
12
 use Illuminate\Database\QueryException;
11
 use Illuminate\Database\QueryException;
13
 use App\Http\Requests\Sales\StoreSaleRequest;
12
 use App\Http\Requests\Sales\StoreSaleRequest;
14
 use App\Http\Requests\Sales\UpdateSaleRequest;
13
 use App\Http\Requests\Sales\UpdateSaleRequest;
15
 use App\Models\Company;
14
 use App\Models\Company;
15
+use App\Services\FunctionService;
16
 use App\Services\SaleService;
16
 use App\Services\SaleService;
17
 use Barryvdh\DomPDF\Facade\Pdf;
17
 use Barryvdh\DomPDF\Facade\Pdf;
18
 
18
 
43
                         "name" => $sale->customer->name,
43
                         "name" => $sale->customer->name,
44
                         "phone" => $sale->customer->phone,
44
                         "phone" => $sale->customer->phone,
45
                         "email" => $sale->customer->email,
45
                         "email" => $sale->customer->email,
46
-                        "price" => HelperService::rupiahFormat(
46
+                        "price" => FunctionService::rupiahFormat(
47
                             SaleService::totalPrice($sale)
47
                             SaleService::totalPrice($sale)
48
                         ),
48
                         ),
49
                         "status" => $sale->status,
49
                         "status" => $sale->status,

+ 2
- 2
app/Http/Controllers/StockProductController.php Wyświetl plik

3
 namespace App\Http\Controllers;
3
 namespace App\Http\Controllers;
4
 
4
 
5
 use App\Models\StockProduct;
5
 use App\Models\StockProduct;
6
-use App\Services\HelperService;
6
+use App\Services\FunctionService;
7
 use Illuminate\Http\Request;
7
 use Illuminate\Http\Request;
8
 
8
 
9
 class StockProductController extends Controller
9
 class StockProductController extends Controller
31
                         "id" => $stockProduct->id,
31
                         "id" => $stockProduct->id,
32
                         "updatedAt" => $stockProduct->updated_at,
32
                         "updatedAt" => $stockProduct->updated_at,
33
                         "name" => $stockProduct->product->name,
33
                         "name" => $stockProduct->product->name,
34
-                        "price" => HelperService::rupiahFormat(
34
+                        "price" => FunctionService::rupiahFormat(
35
                             $stockProduct->price
35
                             $stockProduct->price
36
                         ),
36
                         ),
37
                         "qty" => $stockProduct->qty,
37
                         "qty" => $stockProduct->qty,

+ 2
- 2
app/Models/PurchaseDetail.php Wyświetl plik

2
 
2
 
3
 namespace App\Models;
3
 namespace App\Models;
4
 
4
 
5
-use App\Services\HelperService;
5
+use App\Services\FunctionService;
6
 use Illuminate\Database\Eloquent\Model;
6
 use Illuminate\Database\Eloquent\Model;
7
 use Illuminate\Database\Eloquent\Casts\Attribute;
7
 use Illuminate\Database\Eloquent\Casts\Attribute;
8
 use Illuminate\Database\Eloquent\Factories\HasFactory;
8
 use Illuminate\Database\Eloquent\Factories\HasFactory;
20
                 $ppn = Ppn::first()->ppn;
20
                 $ppn = Ppn::first()->ppn;
21
 
21
 
22
                 return $this->purchase->ppn
22
                 return $this->purchase->ppn
23
-                    ? HelperService::ppn($value, $ppn)
23
+                    ? FunctionService::ppn($value, $ppn)
24
                     : $value;
24
                     : $value;
25
             }
25
             }
26
         );
26
         );

+ 2
- 2
app/Models/SaleDetail.php Wyświetl plik

2
 
2
 
3
 namespace App\Models;
3
 namespace App\Models;
4
 
4
 
5
-use App\Services\HelperService;
5
+use App\Services\FunctionService;
6
 use Illuminate\Database\Eloquent\Casts\Attribute;
6
 use Illuminate\Database\Eloquent\Casts\Attribute;
7
 use Illuminate\Database\Eloquent\Factories\HasFactory;
7
 use Illuminate\Database\Eloquent\Factories\HasFactory;
8
 use Illuminate\Database\Eloquent\Model;
8
 use Illuminate\Database\Eloquent\Model;
20
                 $ppn = Ppn::first()->ppn;
20
                 $ppn = Ppn::first()->ppn;
21
 
21
 
22
                 return $this->sale->ppn
22
                 return $this->sale->ppn
23
-                    ? HelperService::ppn($value, $ppn)
23
+                    ? FunctionService::ppn($value, $ppn)
24
                     : $value;
24
                     : $value;
25
             }
25
             }
26
         );
26
         );

+ 2
- 2
app/Models/StockProduct.php Wyświetl plik

3
 namespace App\Models;
3
 namespace App\Models;
4
 
4
 
5
 use App\Models\Ppn;
5
 use App\Models\Ppn;
6
-use App\Services\HelperService;
6
+use App\Services\FunctionService;
7
 use Carbon\Carbon;
7
 use Carbon\Carbon;
8
 use Illuminate\Database\Eloquent\Model;
8
 use Illuminate\Database\Eloquent\Model;
9
 use Illuminate\Database\Eloquent\Casts\Attribute;
9
 use Illuminate\Database\Eloquent\Casts\Attribute;
30
             get: function ($value) {
30
             get: function ($value) {
31
                 $ppn = Ppn::first()->ppn;
31
                 $ppn = Ppn::first()->ppn;
32
 
32
 
33
-                return $this->ppn ? HelperService::ppn($value, $ppn) : $value;
33
+                return $this->ppn ? FunctionService::ppn($value, $ppn) : $value;
34
             }
34
             }
35
         );
35
         );
36
     }
36
     }

+ 47
- 0
app/Services/DashboardService.php Wyświetl plik

1
+<?php
2
+
3
+namespace App\Services;
4
+
5
+use Illuminate\Support\Facades\DB;
6
+
7
+class DashboardService
8
+{
9
+    public static function productFavorites()
10
+    {
11
+        return DB::table("sale_details")
12
+            ->selectRaw(
13
+                "sale_details.product_number,
14
+                 products.name AS title,
15
+                 SUM(sale_details.qty) AS qty,
16
+                 products.profit"
17
+            )
18
+            ->join(
19
+                "products",
20
+                "products.number",
21
+                "=",
22
+                "sale_details.product_number"
23
+            )
24
+            ->groupByRaw("product_number")
25
+            ->orderByRaw("qty DESC")
26
+            ->limit(5)
27
+            ->get();
28
+    }
29
+
30
+    public static function productAmount()
31
+    {
32
+        return [
33
+            QueryService::amount("sales", __("words.sale")),
34
+            QueryService::amount("purchases", __("words.purchase")),
35
+            QueryService::amount("products", __("words.product")),
36
+            QueryService::amount("stock_products", __("words.stock_product")),
37
+        ];
38
+    }
39
+
40
+    public static function salePurchaseStatistic()
41
+    {
42
+        return [
43
+            __("words.sale") => QueryService::statistic("sales"),
44
+            __("words.purchase") => QueryService::statistic("purchases"),
45
+        ];
46
+    }
47
+}

app/Services/HelperService.php → app/Services/FunctionService.php Wyświetl plik

2
 
2
 
3
 namespace App\Services;
3
 namespace App\Services;
4
 
4
 
5
-class HelperService
5
+class FunctionService
6
 {
6
 {
7
     public static function addPrevValue(array $array)
7
     public static function addPrevValue(array $array)
8
     {
8
     {

+ 0
- 10
app/Services/ProductService.php Wyświetl plik

13
             $product->stockProducts()->exists() ||
13
             $product->stockProducts()->exists() ||
14
             $product->purchaseDetails()->exists();
14
             $product->purchaseDetails()->exists();
15
     }
15
     }
16
-
17
-    public static function productAmount()
18
-    {
19
-        return QueryService::queryAmount("products", "Produk");
20
-    }
21
-
22
-    public static function stockProductAmount()
23
-    {
24
-        return QueryService::queryAmount("stock_products", "Stok Produk");
25
-    }
26
 }
16
 }

+ 0
- 5
app/Services/PurchaseService.php Wyświetl plik

13
             return $purchaseDetail->price * $purchaseDetail->qty;
13
             return $purchaseDetail->price * $purchaseDetail->qty;
14
         });
14
         });
15
     }
15
     }
16
-
17
-    public static function purchaseAmount()
18
-    {
19
-        return QueryService::queryAmount("purchases", "Pembelian");
20
-    }
21
 }
16
 }

+ 49
- 3
app/Services/QueryService.php Wyświetl plik

6
 
6
 
7
 class QueryService
7
 class QueryService
8
 {
8
 {
9
-    public static function queryAmount(string $table, string $title)
9
+    public static function amount(string $table, string $title)
10
     {
10
     {
11
         return DB::table($table)
11
         return DB::table($table)
12
             ->selectRaw(
12
             ->selectRaw(
13
-                "COUNT(*) as amount,
14
-                (SELECT COUNT(*) FROM products WHERE DATE(updated_at) = CURDATE()) as amountToday"
13
+                "COUNT(*) AS amount,
14
+                 (SELECT COUNT(*) FROM products WHERE DATE(updated_at) = CURDATE()) AS amountToday"
15
             )
15
             )
16
             ->get()
16
             ->get()
17
             ->transform(
17
             ->transform(
23
             )
23
             )
24
             ->first();
24
             ->first();
25
     }
25
     }
26
+
27
+    public static function statistic(string $table)
28
+    {
29
+        return DB::table($table)
30
+            ->selectRaw(
31
+                "COUNT(*) AS amount,
32
+                 DATE_FORMAT(created_at, '%b') AS month"
33
+            )
34
+            ->groupByRaw("MONTH(created_at)")
35
+            ->get()
36
+            ->pluck("amount", "month");
37
+    }
38
+
39
+    public static function statisticDualYear(string $table, string $tableJoin)
40
+    {
41
+        return DB::table($table)
42
+            ->selectRaw(
43
+                "DATE_FORMAT($table.created_at, '%Y') AS year,
44
+                 DATE_FORMAT($table.created_at, '%b') AS month,
45
+                 IF(
46
+                 $tableJoin.ppn,
47
+                 $table.price + $table.price * ((
48
+                 SELECT
49
+                    ppn
50
+                 FROM
51
+                    ppns) / 100),
52
+                 $table.price
53
+                 ) AS price,
54
+                 COUNT(*) AS total"
55
+            )
56
+            ->join(
57
+                $tableJoin,
58
+                "$tableJoin.number",
59
+                "=",
60
+                "$table.purchase_number"
61
+            )
62
+            ->groupByRaw(
63
+                "YEAR($table.created_at),
64
+                 MONTH($table.created_at),
65
+                 year,
66
+                 month,
67
+                 price
68
+                 DESC"
69
+            )
70
+            ->get();
71
+    }
26
 }
72
 }

+ 0
- 32
app/Services/SaleService.php Wyświetl plik

3
 namespace App\Services;
3
 namespace App\Services;
4
 
4
 
5
 use App\Models\Sale;
5
 use App\Models\Sale;
6
-use Illuminate\Support\Facades\DB;
7
 
6
 
8
 class SaleService
7
 class SaleService
9
 {
8
 {
13
             return $saleDetail->price * $saleDetail->qty;
12
             return $saleDetail->price * $saleDetail->qty;
14
         });
13
         });
15
     }
14
     }
16
-
17
-    public static function saleAmount()
18
-    {
19
-        return QueryService::queryAmount("sales", "Penjualan");
20
-    }
21
-
22
-    public static function bestSelling()
23
-    {
24
-        return DB::table("sale_details")
25
-            ->selectRaw(
26
-                "product_number, products.name as title, SUM(qty) as qty, products.profit"
27
-            )
28
-            ->join(
29
-                "products",
30
-                "products.number",
31
-                "=",
32
-                "sale_details.product_number"
33
-            )
34
-            ->groupByRaw("product_number")
35
-            ->orderByRaw("qty DESC")
36
-            ->limit(5)
37
-            ->get();
38
-    }
39
-
40
-    public static function saleStatistic()
41
-    {
42
-        return DB::table("sales")
43
-            ->selectRaw("COUNT(*) as amount")
44
-            ->groupByRaw("MONTH(sales.created_at)")
45
-            ->get();
46
-    }
47
 }
15
 }

+ 7
- 9
composer.lock Wyświetl plik

2330
         },
2330
         },
2331
         {
2331
         {
2332
             "name": "monolog/monolog",
2332
             "name": "monolog/monolog",
2333
-            "version": "2.7.0",
2333
+            "version": "2.8.0",
2334
             "source": {
2334
             "source": {
2335
                 "type": "git",
2335
                 "type": "git",
2336
                 "url": "https://github.com/Seldaek/monolog.git",
2336
                 "url": "https://github.com/Seldaek/monolog.git",
2337
-                "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524"
2337
+                "reference": "720488632c590286b88b80e62aa3d3d551ad4a50"
2338
             },
2338
             },
2339
             "dist": {
2339
             "dist": {
2340
                 "type": "zip",
2340
                 "type": "zip",
2341
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5579edf28aee1190a798bfa5be8bc16c563bd524",
2342
-                "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524",
2341
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50",
2342
+                "reference": "720488632c590286b88b80e62aa3d3d551ad4a50",
2343
                 "shasum": ""
2343
                 "shasum": ""
2344
             },
2344
             },
2345
             "require": {
2345
             "require": {
2359
                 "guzzlehttp/psr7": "^2.2",
2359
                 "guzzlehttp/psr7": "^2.2",
2360
                 "mongodb/mongodb": "^1.8",
2360
                 "mongodb/mongodb": "^1.8",
2361
                 "php-amqplib/php-amqplib": "~2.4 || ^3",
2361
                 "php-amqplib/php-amqplib": "~2.4 || ^3",
2362
-                "php-console/php-console": "^3.1.3",
2363
                 "phpspec/prophecy": "^1.15",
2362
                 "phpspec/prophecy": "^1.15",
2364
                 "phpstan/phpstan": "^0.12.91",
2363
                 "phpstan/phpstan": "^0.12.91",
2365
                 "phpunit/phpunit": "^8.5.14",
2364
                 "phpunit/phpunit": "^8.5.14",
2366
-                "predis/predis": "^1.1",
2365
+                "predis/predis": "^1.1 || ^2.0",
2367
                 "rollbar/rollbar": "^1.3 || ^2 || ^3",
2366
                 "rollbar/rollbar": "^1.3 || ^2 || ^3",
2368
                 "ruflin/elastica": "^7",
2367
                 "ruflin/elastica": "^7",
2369
                 "swiftmailer/swiftmailer": "^5.3|^6.0",
2368
                 "swiftmailer/swiftmailer": "^5.3|^6.0",
2383
                 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
2382
                 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
2384
                 "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
2383
                 "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
2385
                 "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
2384
                 "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
2386
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
2387
                 "rollbar/rollbar": "Allow sending log messages to Rollbar",
2385
                 "rollbar/rollbar": "Allow sending log messages to Rollbar",
2388
                 "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
2386
                 "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
2389
             },
2387
             },
2418
             ],
2416
             ],
2419
             "support": {
2417
             "support": {
2420
                 "issues": "https://github.com/Seldaek/monolog/issues",
2418
                 "issues": "https://github.com/Seldaek/monolog/issues",
2421
-                "source": "https://github.com/Seldaek/monolog/tree/2.7.0"
2419
+                "source": "https://github.com/Seldaek/monolog/tree/2.8.0"
2422
             },
2420
             },
2423
             "funding": [
2421
             "funding": [
2424
                 {
2422
                 {
2430
                     "type": "tidelift"
2428
                     "type": "tidelift"
2431
                 }
2429
                 }
2432
             ],
2430
             ],
2433
-            "time": "2022-06-09T08:59:12+00:00"
2431
+            "time": "2022-07-24T11:55:47+00:00"
2434
         },
2432
         },
2435
         {
2433
         {
2436
             "name": "myclabs/php-enum",
2434
             "name": "myclabs/php-enum",

+ 4
- 0
lang/en/words.php Wyświetl plik

38
     'top_up_rank' => 'Top Up',
38
     'top_up_rank' => 'Top Up',
39
     'top_up_number_rank' => 'Top Up :number Rank',
39
     'top_up_number_rank' => 'Top Up :number Rank',
40
     'user' => 'User',
40
     'user' => 'User',
41
+    'sale' => 'Sale',
42
+    'purchase' => 'Purchase',
43
+    'product' => 'Product',
44
+    'stock_product' => 'Stock Product'
41
 
45
 
42
 ];
46
 ];

+ 4
- 0
lang/id/words.php Wyświetl plik

38
     'top_up_rank' => 'Top Up',
38
     'top_up_rank' => 'Top Up',
39
     'top_up_number_rank' => 'Peringkat :number Top Up',
39
     'top_up_number_rank' => 'Peringkat :number Top Up',
40
     'user' => 'User',
40
     'user' => 'User',
41
+    'sale' => 'Penjualan',
42
+    'purchase' => 'Pembelian',
43
+    'product' => 'Produk',
44
+    'stock_product' => 'Stok Produk'
41
 
45
 
42
 ];
46
 ];

+ 180
- 180
package-lock.json Wyświetl plik

867
       }
867
       }
868
     },
868
     },
869
     "node_modules/electron-to-chromium": {
869
     "node_modules/electron-to-chromium": {
870
-      "version": "1.4.199",
871
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz",
872
-      "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==",
870
+      "version": "1.4.200",
871
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.200.tgz",
872
+      "integrity": "sha512-nPyI7oHc8T64oSqRXrAt99gNMpk0SAgPHw/o+hkNKyb5+bcdnFtZcSO9FUJES5cVkVZvo8u4qiZ1gQILl8UXsA==",
873
       "dev": true,
873
       "dev": true,
874
       "peer": true
874
       "peer": true
875
     },
875
     },
876
     "node_modules/esbuild": {
876
     "node_modules/esbuild": {
877
-      "version": "0.14.49",
878
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz",
879
-      "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==",
877
+      "version": "0.14.50",
878
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.50.tgz",
879
+      "integrity": "sha512-SbC3k35Ih2IC6trhbMYW7hYeGdjPKf9atTKwBUHqMCYFZZ9z8zhuvfnZihsnJypl74FjiAKjBRqFkBkAd0rS/w==",
880
       "dev": true,
880
       "dev": true,
881
       "hasInstallScript": true,
881
       "hasInstallScript": true,
882
       "bin": {
882
       "bin": {
886
         "node": ">=12"
886
         "node": ">=12"
887
       },
887
       },
888
       "optionalDependencies": {
888
       "optionalDependencies": {
889
-        "esbuild-android-64": "0.14.49",
890
-        "esbuild-android-arm64": "0.14.49",
891
-        "esbuild-darwin-64": "0.14.49",
892
-        "esbuild-darwin-arm64": "0.14.49",
893
-        "esbuild-freebsd-64": "0.14.49",
894
-        "esbuild-freebsd-arm64": "0.14.49",
895
-        "esbuild-linux-32": "0.14.49",
896
-        "esbuild-linux-64": "0.14.49",
897
-        "esbuild-linux-arm": "0.14.49",
898
-        "esbuild-linux-arm64": "0.14.49",
899
-        "esbuild-linux-mips64le": "0.14.49",
900
-        "esbuild-linux-ppc64le": "0.14.49",
901
-        "esbuild-linux-riscv64": "0.14.49",
902
-        "esbuild-linux-s390x": "0.14.49",
903
-        "esbuild-netbsd-64": "0.14.49",
904
-        "esbuild-openbsd-64": "0.14.49",
905
-        "esbuild-sunos-64": "0.14.49",
906
-        "esbuild-windows-32": "0.14.49",
907
-        "esbuild-windows-64": "0.14.49",
908
-        "esbuild-windows-arm64": "0.14.49"
889
+        "esbuild-android-64": "0.14.50",
890
+        "esbuild-android-arm64": "0.14.50",
891
+        "esbuild-darwin-64": "0.14.50",
892
+        "esbuild-darwin-arm64": "0.14.50",
893
+        "esbuild-freebsd-64": "0.14.50",
894
+        "esbuild-freebsd-arm64": "0.14.50",
895
+        "esbuild-linux-32": "0.14.50",
896
+        "esbuild-linux-64": "0.14.50",
897
+        "esbuild-linux-arm": "0.14.50",
898
+        "esbuild-linux-arm64": "0.14.50",
899
+        "esbuild-linux-mips64le": "0.14.50",
900
+        "esbuild-linux-ppc64le": "0.14.50",
901
+        "esbuild-linux-riscv64": "0.14.50",
902
+        "esbuild-linux-s390x": "0.14.50",
903
+        "esbuild-netbsd-64": "0.14.50",
904
+        "esbuild-openbsd-64": "0.14.50",
905
+        "esbuild-sunos-64": "0.14.50",
906
+        "esbuild-windows-32": "0.14.50",
907
+        "esbuild-windows-64": "0.14.50",
908
+        "esbuild-windows-arm64": "0.14.50"
909
       }
909
       }
910
     },
910
     },
911
     "node_modules/esbuild-android-64": {
911
     "node_modules/esbuild-android-64": {
912
-      "version": "0.14.49",
913
-      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz",
914
-      "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==",
912
+      "version": "0.14.50",
913
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.50.tgz",
914
+      "integrity": "sha512-H7iUEm7gUJHzidsBlFPGF6FTExazcgXL/46xxLo6i6bMtPim6ZmXyTccS8yOMpy6HAC6dPZ/JCQqrkkin69n6Q==",
915
       "cpu": [
915
       "cpu": [
916
         "x64"
916
         "x64"
917
       ],
917
       ],
925
       }
925
       }
926
     },
926
     },
927
     "node_modules/esbuild-android-arm64": {
927
     "node_modules/esbuild-android-arm64": {
928
-      "version": "0.14.49",
929
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz",
930
-      "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==",
928
+      "version": "0.14.50",
929
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.50.tgz",
930
+      "integrity": "sha512-NFaoqEwa+OYfoYVpQWDMdKII7wZZkAjtJFo1WdnBeCYlYikvUhTnf2aPwPu5qEAw/ie1NYK0yn3cafwP+kP+OQ==",
931
       "cpu": [
931
       "cpu": [
932
         "arm64"
932
         "arm64"
933
       ],
933
       ],
941
       }
941
       }
942
     },
942
     },
943
     "node_modules/esbuild-darwin-64": {
943
     "node_modules/esbuild-darwin-64": {
944
-      "version": "0.14.49",
945
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz",
946
-      "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==",
944
+      "version": "0.14.50",
945
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.50.tgz",
946
+      "integrity": "sha512-gDQsCvGnZiJv9cfdO48QqxkRV8oKAXgR2CGp7TdIpccwFdJMHf8hyIJhMW/05b/HJjET/26Us27Jx91BFfEVSA==",
947
       "cpu": [
947
       "cpu": [
948
         "x64"
948
         "x64"
949
       ],
949
       ],
957
       }
957
       }
958
     },
958
     },
959
     "node_modules/esbuild-darwin-arm64": {
959
     "node_modules/esbuild-darwin-arm64": {
960
-      "version": "0.14.49",
961
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz",
962
-      "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==",
960
+      "version": "0.14.50",
961
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.50.tgz",
962
+      "integrity": "sha512-36nNs5OjKIb/Q50Sgp8+rYW/PqirRiFN0NFc9hEvgPzNJxeJedktXwzfJSln4EcRFRh5Vz4IlqFRScp+aiBBzA==",
963
       "cpu": [
963
       "cpu": [
964
         "arm64"
964
         "arm64"
965
       ],
965
       ],
973
       }
973
       }
974
     },
974
     },
975
     "node_modules/esbuild-freebsd-64": {
975
     "node_modules/esbuild-freebsd-64": {
976
-      "version": "0.14.49",
977
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz",
978
-      "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==",
976
+      "version": "0.14.50",
977
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.50.tgz",
978
+      "integrity": "sha512-/1pHHCUem8e/R86/uR+4v5diI2CtBdiWKiqGuPa9b/0x3Nwdh5AOH7lj+8823C6uX1e0ufwkSLkS+aFZiBCWxA==",
979
       "cpu": [
979
       "cpu": [
980
         "x64"
980
         "x64"
981
       ],
981
       ],
989
       }
989
       }
990
     },
990
     },
991
     "node_modules/esbuild-freebsd-arm64": {
991
     "node_modules/esbuild-freebsd-arm64": {
992
-      "version": "0.14.49",
993
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz",
994
-      "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==",
992
+      "version": "0.14.50",
993
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.50.tgz",
994
+      "integrity": "sha512-iKwUVMQztnPZe5pUYHdMkRc9aSpvoV1mkuHlCoPtxZA3V+Kg/ptpzkcSY+fKd0kuom+l6Rc93k0UPVkP7xoqrw==",
995
       "cpu": [
995
       "cpu": [
996
         "arm64"
996
         "arm64"
997
       ],
997
       ],
1005
       }
1005
       }
1006
     },
1006
     },
1007
     "node_modules/esbuild-linux-32": {
1007
     "node_modules/esbuild-linux-32": {
1008
-      "version": "0.14.49",
1009
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz",
1010
-      "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==",
1008
+      "version": "0.14.50",
1009
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.50.tgz",
1010
+      "integrity": "sha512-sWUwvf3uz7dFOpLzYuih+WQ7dRycrBWHCdoXJ4I4XdMxEHCECd8b7a9N9u7FzT6XR2gHPk9EzvchQUtiEMRwqw==",
1011
       "cpu": [
1011
       "cpu": [
1012
         "ia32"
1012
         "ia32"
1013
       ],
1013
       ],
1021
       }
1021
       }
1022
     },
1022
     },
1023
     "node_modules/esbuild-linux-64": {
1023
     "node_modules/esbuild-linux-64": {
1024
-      "version": "0.14.49",
1025
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz",
1026
-      "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==",
1024
+      "version": "0.14.50",
1025
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.50.tgz",
1026
+      "integrity": "sha512-u0PQxPhaeI629t4Y3EEcQ0wmWG+tC/LpP2K7yDFvwuPq0jSQ8SIN+ARNYfRjGW15O2we3XJvklbGV0wRuUCPig==",
1027
       "cpu": [
1027
       "cpu": [
1028
         "x64"
1028
         "x64"
1029
       ],
1029
       ],
1037
       }
1037
       }
1038
     },
1038
     },
1039
     "node_modules/esbuild-linux-arm": {
1039
     "node_modules/esbuild-linux-arm": {
1040
-      "version": "0.14.49",
1041
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz",
1042
-      "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==",
1040
+      "version": "0.14.50",
1041
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.50.tgz",
1042
+      "integrity": "sha512-VALZq13bhmFJYFE/mLEb+9A0w5vo8z+YDVOWeaf9vOTrSC31RohRIwtxXBnVJ7YKLYfEMzcgFYf+OFln3Y0cWg==",
1043
       "cpu": [
1043
       "cpu": [
1044
         "arm"
1044
         "arm"
1045
       ],
1045
       ],
1053
       }
1053
       }
1054
     },
1054
     },
1055
     "node_modules/esbuild-linux-arm64": {
1055
     "node_modules/esbuild-linux-arm64": {
1056
-      "version": "0.14.49",
1057
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz",
1058
-      "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==",
1056
+      "version": "0.14.50",
1057
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.50.tgz",
1058
+      "integrity": "sha512-ZyfoNgsTftD7Rp5S7La5auomKdNeB3Ck+kSKXC4pp96VnHyYGjHHXWIlcbH8i+efRn9brszo1/Thl1qn8RqmhQ==",
1059
       "cpu": [
1059
       "cpu": [
1060
         "arm64"
1060
         "arm64"
1061
       ],
1061
       ],
1069
       }
1069
       }
1070
     },
1070
     },
1071
     "node_modules/esbuild-linux-mips64le": {
1071
     "node_modules/esbuild-linux-mips64le": {
1072
-      "version": "0.14.49",
1073
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz",
1074
-      "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==",
1072
+      "version": "0.14.50",
1073
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.50.tgz",
1074
+      "integrity": "sha512-ygo31Vxn/WrmjKCHkBoutOlFG5yM9J2UhzHb0oWD9O61dGg+Hzjz9hjf5cmM7FBhAzdpOdEWHIrVOg2YAi6rTw==",
1075
       "cpu": [
1075
       "cpu": [
1076
         "mips64el"
1076
         "mips64el"
1077
       ],
1077
       ],
1085
       }
1085
       }
1086
     },
1086
     },
1087
     "node_modules/esbuild-linux-ppc64le": {
1087
     "node_modules/esbuild-linux-ppc64le": {
1088
-      "version": "0.14.49",
1089
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz",
1090
-      "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==",
1088
+      "version": "0.14.50",
1089
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.50.tgz",
1090
+      "integrity": "sha512-xWCKU5UaiTUT6Wz/O7GKP9KWdfbsb7vhfgQzRfX4ahh5NZV4ozZ4+SdzYG8WxetsLy84UzLX3Pi++xpVn1OkFQ==",
1091
       "cpu": [
1091
       "cpu": [
1092
         "ppc64"
1092
         "ppc64"
1093
       ],
1093
       ],
1101
       }
1101
       }
1102
     },
1102
     },
1103
     "node_modules/esbuild-linux-riscv64": {
1103
     "node_modules/esbuild-linux-riscv64": {
1104
-      "version": "0.14.49",
1105
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz",
1106
-      "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==",
1104
+      "version": "0.14.50",
1105
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.50.tgz",
1106
+      "integrity": "sha512-0+dsneSEihZTopoO9B6Z6K4j3uI7EdxBP7YSF5rTwUgCID+wHD3vM1gGT0m+pjCW+NOacU9kH/WE9N686FHAJg==",
1107
       "cpu": [
1107
       "cpu": [
1108
         "riscv64"
1108
         "riscv64"
1109
       ],
1109
       ],
1117
       }
1117
       }
1118
     },
1118
     },
1119
     "node_modules/esbuild-linux-s390x": {
1119
     "node_modules/esbuild-linux-s390x": {
1120
-      "version": "0.14.49",
1121
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz",
1122
-      "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==",
1120
+      "version": "0.14.50",
1121
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.50.tgz",
1122
+      "integrity": "sha512-tVjqcu8o0P9H4StwbIhL1sQYm5mWATlodKB6dpEZFkcyTI8kfIGWiWcrGmkNGH2i1kBUOsdlBafPxR3nzp3TDA==",
1123
       "cpu": [
1123
       "cpu": [
1124
         "s390x"
1124
         "s390x"
1125
       ],
1125
       ],
1133
       }
1133
       }
1134
     },
1134
     },
1135
     "node_modules/esbuild-netbsd-64": {
1135
     "node_modules/esbuild-netbsd-64": {
1136
-      "version": "0.14.49",
1137
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz",
1138
-      "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==",
1136
+      "version": "0.14.50",
1137
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.50.tgz",
1138
+      "integrity": "sha512-0R/glfqAQ2q6MHDf7YJw/TulibugjizBxyPvZIcorH0Mb7vSimdHy0XF5uCba5CKt+r4wjax1mvO9lZ4jiAhEg==",
1139
       "cpu": [
1139
       "cpu": [
1140
         "x64"
1140
         "x64"
1141
       ],
1141
       ],
1149
       }
1149
       }
1150
     },
1150
     },
1151
     "node_modules/esbuild-openbsd-64": {
1151
     "node_modules/esbuild-openbsd-64": {
1152
-      "version": "0.14.49",
1153
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz",
1154
-      "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==",
1152
+      "version": "0.14.50",
1153
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.50.tgz",
1154
+      "integrity": "sha512-7PAtmrR5mDOFubXIkuxYQ4bdNS6XCK8AIIHUiZxq1kL8cFIH5731jPcXQ4JNy/wbj1C9sZ8rzD8BIM80Tqk29w==",
1155
       "cpu": [
1155
       "cpu": [
1156
         "x64"
1156
         "x64"
1157
       ],
1157
       ],
1165
       }
1165
       }
1166
     },
1166
     },
1167
     "node_modules/esbuild-sunos-64": {
1167
     "node_modules/esbuild-sunos-64": {
1168
-      "version": "0.14.49",
1169
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz",
1170
-      "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==",
1168
+      "version": "0.14.50",
1169
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.50.tgz",
1170
+      "integrity": "sha512-gBxNY/wyptvD7PkHIYcq7se6SQEXcSC8Y7mE0FJB+CGgssEWf6vBPfTTZ2b6BWKnmaP6P6qb7s/KRIV5T2PxsQ==",
1171
       "cpu": [
1171
       "cpu": [
1172
         "x64"
1172
         "x64"
1173
       ],
1173
       ],
1181
       }
1181
       }
1182
     },
1182
     },
1183
     "node_modules/esbuild-windows-32": {
1183
     "node_modules/esbuild-windows-32": {
1184
-      "version": "0.14.49",
1185
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz",
1186
-      "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==",
1184
+      "version": "0.14.50",
1185
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.50.tgz",
1186
+      "integrity": "sha512-MOOe6J9cqe/iW1qbIVYSAqzJFh0p2LBLhVUIWdMVnNUNjvg2/4QNX4oT4IzgDeldU+Bym9/Tn6+DxvUHJXL5Zw==",
1187
       "cpu": [
1187
       "cpu": [
1188
         "ia32"
1188
         "ia32"
1189
       ],
1189
       ],
1197
       }
1197
       }
1198
     },
1198
     },
1199
     "node_modules/esbuild-windows-64": {
1199
     "node_modules/esbuild-windows-64": {
1200
-      "version": "0.14.49",
1201
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz",
1202
-      "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==",
1200
+      "version": "0.14.50",
1201
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.50.tgz",
1202
+      "integrity": "sha512-r/qE5Ex3w1jjGv/JlpPoWB365ldkppUlnizhMxJgojp907ZF1PgLTuW207kgzZcSCXyquL9qJkMsY+MRtaZ5yQ==",
1203
       "cpu": [
1203
       "cpu": [
1204
         "x64"
1204
         "x64"
1205
       ],
1205
       ],
1213
       }
1213
       }
1214
     },
1214
     },
1215
     "node_modules/esbuild-windows-arm64": {
1215
     "node_modules/esbuild-windows-arm64": {
1216
-      "version": "0.14.49",
1217
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz",
1218
-      "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==",
1216
+      "version": "0.14.50",
1217
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.50.tgz",
1218
+      "integrity": "sha512-EMS4lQnsIe12ZyAinOINx7eq2mjpDdhGZZWDwPZE/yUTN9cnc2Ze/xUTYIAyaJqrqQda3LnDpADKpvLvol6ENQ==",
1219
       "cpu": [
1219
       "cpu": [
1220
         "arm64"
1220
         "arm64"
1221
       ],
1221
       ],
2024
       }
2024
       }
2025
     },
2025
     },
2026
     "node_modules/vite": {
2026
     "node_modules/vite": {
2027
-      "version": "3.0.2",
2028
-      "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz",
2029
-      "integrity": "sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==",
2027
+      "version": "3.0.3",
2028
+      "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.3.tgz",
2029
+      "integrity": "sha512-sDIpIcl3mv1NUaSzZwiXGEy1ZoWwwC2vkxUHY6yiDacR6zf//ZFuBJrozO62gedpE43pmxnLATNR5IYUdAEkMQ==",
2030
       "dev": true,
2030
       "dev": true,
2031
       "dependencies": {
2031
       "dependencies": {
2032
         "esbuild": "^0.14.47",
2032
         "esbuild": "^0.14.47",
2753
       }
2753
       }
2754
     },
2754
     },
2755
     "electron-to-chromium": {
2755
     "electron-to-chromium": {
2756
-      "version": "1.4.199",
2757
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz",
2758
-      "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==",
2756
+      "version": "1.4.200",
2757
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.200.tgz",
2758
+      "integrity": "sha512-nPyI7oHc8T64oSqRXrAt99gNMpk0SAgPHw/o+hkNKyb5+bcdnFtZcSO9FUJES5cVkVZvo8u4qiZ1gQILl8UXsA==",
2759
       "dev": true,
2759
       "dev": true,
2760
       "peer": true
2760
       "peer": true
2761
     },
2761
     },
2762
     "esbuild": {
2762
     "esbuild": {
2763
-      "version": "0.14.49",
2764
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz",
2765
-      "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==",
2766
-      "dev": true,
2767
-      "requires": {
2768
-        "esbuild-android-64": "0.14.49",
2769
-        "esbuild-android-arm64": "0.14.49",
2770
-        "esbuild-darwin-64": "0.14.49",
2771
-        "esbuild-darwin-arm64": "0.14.49",
2772
-        "esbuild-freebsd-64": "0.14.49",
2773
-        "esbuild-freebsd-arm64": "0.14.49",
2774
-        "esbuild-linux-32": "0.14.49",
2775
-        "esbuild-linux-64": "0.14.49",
2776
-        "esbuild-linux-arm": "0.14.49",
2777
-        "esbuild-linux-arm64": "0.14.49",
2778
-        "esbuild-linux-mips64le": "0.14.49",
2779
-        "esbuild-linux-ppc64le": "0.14.49",
2780
-        "esbuild-linux-riscv64": "0.14.49",
2781
-        "esbuild-linux-s390x": "0.14.49",
2782
-        "esbuild-netbsd-64": "0.14.49",
2783
-        "esbuild-openbsd-64": "0.14.49",
2784
-        "esbuild-sunos-64": "0.14.49",
2785
-        "esbuild-windows-32": "0.14.49",
2786
-        "esbuild-windows-64": "0.14.49",
2787
-        "esbuild-windows-arm64": "0.14.49"
2763
+      "version": "0.14.50",
2764
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.50.tgz",
2765
+      "integrity": "sha512-SbC3k35Ih2IC6trhbMYW7hYeGdjPKf9atTKwBUHqMCYFZZ9z8zhuvfnZihsnJypl74FjiAKjBRqFkBkAd0rS/w==",
2766
+      "dev": true,
2767
+      "requires": {
2768
+        "esbuild-android-64": "0.14.50",
2769
+        "esbuild-android-arm64": "0.14.50",
2770
+        "esbuild-darwin-64": "0.14.50",
2771
+        "esbuild-darwin-arm64": "0.14.50",
2772
+        "esbuild-freebsd-64": "0.14.50",
2773
+        "esbuild-freebsd-arm64": "0.14.50",
2774
+        "esbuild-linux-32": "0.14.50",
2775
+        "esbuild-linux-64": "0.14.50",
2776
+        "esbuild-linux-arm": "0.14.50",
2777
+        "esbuild-linux-arm64": "0.14.50",
2778
+        "esbuild-linux-mips64le": "0.14.50",
2779
+        "esbuild-linux-ppc64le": "0.14.50",
2780
+        "esbuild-linux-riscv64": "0.14.50",
2781
+        "esbuild-linux-s390x": "0.14.50",
2782
+        "esbuild-netbsd-64": "0.14.50",
2783
+        "esbuild-openbsd-64": "0.14.50",
2784
+        "esbuild-sunos-64": "0.14.50",
2785
+        "esbuild-windows-32": "0.14.50",
2786
+        "esbuild-windows-64": "0.14.50",
2787
+        "esbuild-windows-arm64": "0.14.50"
2788
       }
2788
       }
2789
     },
2789
     },
2790
     "esbuild-android-64": {
2790
     "esbuild-android-64": {
2791
-      "version": "0.14.49",
2792
-      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz",
2793
-      "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==",
2791
+      "version": "0.14.50",
2792
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.50.tgz",
2793
+      "integrity": "sha512-H7iUEm7gUJHzidsBlFPGF6FTExazcgXL/46xxLo6i6bMtPim6ZmXyTccS8yOMpy6HAC6dPZ/JCQqrkkin69n6Q==",
2794
       "dev": true,
2794
       "dev": true,
2795
       "optional": true
2795
       "optional": true
2796
     },
2796
     },
2797
     "esbuild-android-arm64": {
2797
     "esbuild-android-arm64": {
2798
-      "version": "0.14.49",
2799
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz",
2800
-      "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==",
2798
+      "version": "0.14.50",
2799
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.50.tgz",
2800
+      "integrity": "sha512-NFaoqEwa+OYfoYVpQWDMdKII7wZZkAjtJFo1WdnBeCYlYikvUhTnf2aPwPu5qEAw/ie1NYK0yn3cafwP+kP+OQ==",
2801
       "dev": true,
2801
       "dev": true,
2802
       "optional": true
2802
       "optional": true
2803
     },
2803
     },
2804
     "esbuild-darwin-64": {
2804
     "esbuild-darwin-64": {
2805
-      "version": "0.14.49",
2806
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz",
2807
-      "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==",
2805
+      "version": "0.14.50",
2806
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.50.tgz",
2807
+      "integrity": "sha512-gDQsCvGnZiJv9cfdO48QqxkRV8oKAXgR2CGp7TdIpccwFdJMHf8hyIJhMW/05b/HJjET/26Us27Jx91BFfEVSA==",
2808
       "dev": true,
2808
       "dev": true,
2809
       "optional": true
2809
       "optional": true
2810
     },
2810
     },
2811
     "esbuild-darwin-arm64": {
2811
     "esbuild-darwin-arm64": {
2812
-      "version": "0.14.49",
2813
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz",
2814
-      "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==",
2812
+      "version": "0.14.50",
2813
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.50.tgz",
2814
+      "integrity": "sha512-36nNs5OjKIb/Q50Sgp8+rYW/PqirRiFN0NFc9hEvgPzNJxeJedktXwzfJSln4EcRFRh5Vz4IlqFRScp+aiBBzA==",
2815
       "dev": true,
2815
       "dev": true,
2816
       "optional": true
2816
       "optional": true
2817
     },
2817
     },
2818
     "esbuild-freebsd-64": {
2818
     "esbuild-freebsd-64": {
2819
-      "version": "0.14.49",
2820
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz",
2821
-      "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==",
2819
+      "version": "0.14.50",
2820
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.50.tgz",
2821
+      "integrity": "sha512-/1pHHCUem8e/R86/uR+4v5diI2CtBdiWKiqGuPa9b/0x3Nwdh5AOH7lj+8823C6uX1e0ufwkSLkS+aFZiBCWxA==",
2822
       "dev": true,
2822
       "dev": true,
2823
       "optional": true
2823
       "optional": true
2824
     },
2824
     },
2825
     "esbuild-freebsd-arm64": {
2825
     "esbuild-freebsd-arm64": {
2826
-      "version": "0.14.49",
2827
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz",
2828
-      "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==",
2826
+      "version": "0.14.50",
2827
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.50.tgz",
2828
+      "integrity": "sha512-iKwUVMQztnPZe5pUYHdMkRc9aSpvoV1mkuHlCoPtxZA3V+Kg/ptpzkcSY+fKd0kuom+l6Rc93k0UPVkP7xoqrw==",
2829
       "dev": true,
2829
       "dev": true,
2830
       "optional": true
2830
       "optional": true
2831
     },
2831
     },
2832
     "esbuild-linux-32": {
2832
     "esbuild-linux-32": {
2833
-      "version": "0.14.49",
2834
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz",
2835
-      "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==",
2833
+      "version": "0.14.50",
2834
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.50.tgz",
2835
+      "integrity": "sha512-sWUwvf3uz7dFOpLzYuih+WQ7dRycrBWHCdoXJ4I4XdMxEHCECd8b7a9N9u7FzT6XR2gHPk9EzvchQUtiEMRwqw==",
2836
       "dev": true,
2836
       "dev": true,
2837
       "optional": true
2837
       "optional": true
2838
     },
2838
     },
2839
     "esbuild-linux-64": {
2839
     "esbuild-linux-64": {
2840
-      "version": "0.14.49",
2841
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz",
2842
-      "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==",
2840
+      "version": "0.14.50",
2841
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.50.tgz",
2842
+      "integrity": "sha512-u0PQxPhaeI629t4Y3EEcQ0wmWG+tC/LpP2K7yDFvwuPq0jSQ8SIN+ARNYfRjGW15O2we3XJvklbGV0wRuUCPig==",
2843
       "dev": true,
2843
       "dev": true,
2844
       "optional": true
2844
       "optional": true
2845
     },
2845
     },
2846
     "esbuild-linux-arm": {
2846
     "esbuild-linux-arm": {
2847
-      "version": "0.14.49",
2848
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz",
2849
-      "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==",
2847
+      "version": "0.14.50",
2848
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.50.tgz",
2849
+      "integrity": "sha512-VALZq13bhmFJYFE/mLEb+9A0w5vo8z+YDVOWeaf9vOTrSC31RohRIwtxXBnVJ7YKLYfEMzcgFYf+OFln3Y0cWg==",
2850
       "dev": true,
2850
       "dev": true,
2851
       "optional": true
2851
       "optional": true
2852
     },
2852
     },
2853
     "esbuild-linux-arm64": {
2853
     "esbuild-linux-arm64": {
2854
-      "version": "0.14.49",
2855
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz",
2856
-      "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==",
2854
+      "version": "0.14.50",
2855
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.50.tgz",
2856
+      "integrity": "sha512-ZyfoNgsTftD7Rp5S7La5auomKdNeB3Ck+kSKXC4pp96VnHyYGjHHXWIlcbH8i+efRn9brszo1/Thl1qn8RqmhQ==",
2857
       "dev": true,
2857
       "dev": true,
2858
       "optional": true
2858
       "optional": true
2859
     },
2859
     },
2860
     "esbuild-linux-mips64le": {
2860
     "esbuild-linux-mips64le": {
2861
-      "version": "0.14.49",
2862
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz",
2863
-      "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==",
2861
+      "version": "0.14.50",
2862
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.50.tgz",
2863
+      "integrity": "sha512-ygo31Vxn/WrmjKCHkBoutOlFG5yM9J2UhzHb0oWD9O61dGg+Hzjz9hjf5cmM7FBhAzdpOdEWHIrVOg2YAi6rTw==",
2864
       "dev": true,
2864
       "dev": true,
2865
       "optional": true
2865
       "optional": true
2866
     },
2866
     },
2867
     "esbuild-linux-ppc64le": {
2867
     "esbuild-linux-ppc64le": {
2868
-      "version": "0.14.49",
2869
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz",
2870
-      "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==",
2868
+      "version": "0.14.50",
2869
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.50.tgz",
2870
+      "integrity": "sha512-xWCKU5UaiTUT6Wz/O7GKP9KWdfbsb7vhfgQzRfX4ahh5NZV4ozZ4+SdzYG8WxetsLy84UzLX3Pi++xpVn1OkFQ==",
2871
       "dev": true,
2871
       "dev": true,
2872
       "optional": true
2872
       "optional": true
2873
     },
2873
     },
2874
     "esbuild-linux-riscv64": {
2874
     "esbuild-linux-riscv64": {
2875
-      "version": "0.14.49",
2876
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz",
2877
-      "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==",
2875
+      "version": "0.14.50",
2876
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.50.tgz",
2877
+      "integrity": "sha512-0+dsneSEihZTopoO9B6Z6K4j3uI7EdxBP7YSF5rTwUgCID+wHD3vM1gGT0m+pjCW+NOacU9kH/WE9N686FHAJg==",
2878
       "dev": true,
2878
       "dev": true,
2879
       "optional": true
2879
       "optional": true
2880
     },
2880
     },
2881
     "esbuild-linux-s390x": {
2881
     "esbuild-linux-s390x": {
2882
-      "version": "0.14.49",
2883
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz",
2884
-      "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==",
2882
+      "version": "0.14.50",
2883
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.50.tgz",
2884
+      "integrity": "sha512-tVjqcu8o0P9H4StwbIhL1sQYm5mWATlodKB6dpEZFkcyTI8kfIGWiWcrGmkNGH2i1kBUOsdlBafPxR3nzp3TDA==",
2885
       "dev": true,
2885
       "dev": true,
2886
       "optional": true
2886
       "optional": true
2887
     },
2887
     },
2888
     "esbuild-netbsd-64": {
2888
     "esbuild-netbsd-64": {
2889
-      "version": "0.14.49",
2890
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz",
2891
-      "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==",
2889
+      "version": "0.14.50",
2890
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.50.tgz",
2891
+      "integrity": "sha512-0R/glfqAQ2q6MHDf7YJw/TulibugjizBxyPvZIcorH0Mb7vSimdHy0XF5uCba5CKt+r4wjax1mvO9lZ4jiAhEg==",
2892
       "dev": true,
2892
       "dev": true,
2893
       "optional": true
2893
       "optional": true
2894
     },
2894
     },
2895
     "esbuild-openbsd-64": {
2895
     "esbuild-openbsd-64": {
2896
-      "version": "0.14.49",
2897
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz",
2898
-      "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==",
2896
+      "version": "0.14.50",
2897
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.50.tgz",
2898
+      "integrity": "sha512-7PAtmrR5mDOFubXIkuxYQ4bdNS6XCK8AIIHUiZxq1kL8cFIH5731jPcXQ4JNy/wbj1C9sZ8rzD8BIM80Tqk29w==",
2899
       "dev": true,
2899
       "dev": true,
2900
       "optional": true
2900
       "optional": true
2901
     },
2901
     },
2902
     "esbuild-sunos-64": {
2902
     "esbuild-sunos-64": {
2903
-      "version": "0.14.49",
2904
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz",
2905
-      "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==",
2903
+      "version": "0.14.50",
2904
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.50.tgz",
2905
+      "integrity": "sha512-gBxNY/wyptvD7PkHIYcq7se6SQEXcSC8Y7mE0FJB+CGgssEWf6vBPfTTZ2b6BWKnmaP6P6qb7s/KRIV5T2PxsQ==",
2906
       "dev": true,
2906
       "dev": true,
2907
       "optional": true
2907
       "optional": true
2908
     },
2908
     },
2909
     "esbuild-windows-32": {
2909
     "esbuild-windows-32": {
2910
-      "version": "0.14.49",
2911
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz",
2912
-      "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==",
2910
+      "version": "0.14.50",
2911
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.50.tgz",
2912
+      "integrity": "sha512-MOOe6J9cqe/iW1qbIVYSAqzJFh0p2LBLhVUIWdMVnNUNjvg2/4QNX4oT4IzgDeldU+Bym9/Tn6+DxvUHJXL5Zw==",
2913
       "dev": true,
2913
       "dev": true,
2914
       "optional": true
2914
       "optional": true
2915
     },
2915
     },
2916
     "esbuild-windows-64": {
2916
     "esbuild-windows-64": {
2917
-      "version": "0.14.49",
2918
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz",
2919
-      "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==",
2917
+      "version": "0.14.50",
2918
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.50.tgz",
2919
+      "integrity": "sha512-r/qE5Ex3w1jjGv/JlpPoWB365ldkppUlnizhMxJgojp907ZF1PgLTuW207kgzZcSCXyquL9qJkMsY+MRtaZ5yQ==",
2920
       "dev": true,
2920
       "dev": true,
2921
       "optional": true
2921
       "optional": true
2922
     },
2922
     },
2923
     "esbuild-windows-arm64": {
2923
     "esbuild-windows-arm64": {
2924
-      "version": "0.14.49",
2925
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz",
2926
-      "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==",
2924
+      "version": "0.14.50",
2925
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.50.tgz",
2926
+      "integrity": "sha512-EMS4lQnsIe12ZyAinOINx7eq2mjpDdhGZZWDwPZE/yUTN9cnc2Ze/xUTYIAyaJqrqQda3LnDpADKpvLvol6ENQ==",
2927
       "dev": true,
2927
       "dev": true,
2928
       "optional": true
2928
       "optional": true
2929
     },
2929
     },
3484
       }
3484
       }
3485
     },
3485
     },
3486
     "vite": {
3486
     "vite": {
3487
-      "version": "3.0.2",
3488
-      "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz",
3489
-      "integrity": "sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==",
3487
+      "version": "3.0.3",
3488
+      "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.3.tgz",
3489
+      "integrity": "sha512-sDIpIcl3mv1NUaSzZwiXGEy1ZoWwwC2vkxUHY6yiDacR6zf//ZFuBJrozO62gedpE43pmxnLATNR5IYUdAEkMQ==",
3490
       "dev": true,
3490
       "dev": true,
3491
       "requires": {
3491
       "requires": {
3492
         "esbuild": "^0.14.47",
3492
         "esbuild": "^0.14.47",

+ 42
- 48
resources/js/pages/Dashboards/Index.vue Wyświetl plik

2
 import CardCount from './Components/CardCount.vue'
2
 import CardCount from './Components/CardCount.vue'
3
 import CardProductFavorite from './Components/CardProductFavorite.vue'
3
 import CardProductFavorite from './Components/CardProductFavorite.vue'
4
 import DashboardLayout from '@/layouts/Dashboard/DashboardLayout.vue'
4
 import DashboardLayout from '@/layouts/Dashboard/DashboardLayout.vue'
5
+import { computed } from '@vue/reactivity'
5
 
6
 
6
 const props = defineProps([
7
 const props = defineProps([
7
-  'productCounts',
8
+  'productAmount',
8
   'productFavorites',
9
   'productFavorites',
9
-  'saleStatistic',
10
+  'salePurchaseStatistic',
10
 ])
11
 ])
11
 
12
 
12
-const purchaseAndSale = {
13
-  labels: [
14
-    'Jan',
15
-    'Feb',
16
-    'Mar',
17
-    'Apr',
18
-    'May',
19
-    'Jun',
20
-    'Jul',
21
-    'Aug',
22
-    'Sep',
23
-    'Oct',
24
-    'Nov',
25
-    'Dec',
26
-  ],
27
-  datasets: [
28
-    {
29
-      label: 'Pembelian',
30
-      data: [65, 59, 80, 81, 56, 55, 40],
31
-      fill: false,
32
-      backgroundColor: '#2f4860',
33
-      borderColor: '#2f4860',
34
-      tension: 0.4,
35
-    },
36
-    {
37
-      label: 'Penjualan',
38
-      data: [28, 48, 40, 19, 86, 27, 90],
39
-      fill: false,
40
-      backgroundColor: '#00bb7e',
41
-      borderColor: '#00bb7e',
42
-      tension: 0.4,
43
-    },
44
-  ],
45
-}
13
+const salePurchase = computed(() => {
14
+  const data = {
15
+    datasets: [
16
+      {
17
+        label: null,
18
+        data: null,
19
+        fill: false,
20
+        backgroundColor: '#2f4860',
21
+        borderColor: '#2f4860',
22
+        tension: 0.4,
23
+      },
24
+      {
25
+        label: null,
26
+        data: null,
27
+        fill: false,
28
+        backgroundColor: '#00bb7e',
29
+        borderColor: '#00bb7e',
30
+        tension: 0.4,
31
+      },
32
+    ],
33
+  }
34
+
35
+  let index = 0
36
+
37
+  for (const key in props.salePurchaseStatistic) {
38
+    data.datasets[index].label = key
39
+    data.datasets[index].data = props.salePurchaseStatistic[key]
40
+
41
+    console.info(props.salePurchaseStatistic[key])
42
+
43
+    index++
44
+  }
45
+
46
+  return data
47
+})
46
 
48
 
47
 const barData = {
49
 const barData = {
48
   labels: [
50
   labels: [
84
     },
86
     },
85
   ],
87
   ],
86
 }
88
 }
87
-
88
-const lineOptions = null
89
-
90
-const productCounts = props.productCounts
91
 </script>
89
 </script>
92
 
90
 
93
 <template>
91
 <template>
95
     <div class="grid">
93
     <div class="grid">
96
       <div class="col-12">
94
       <div class="col-12">
97
         <div class="grid">
95
         <div class="grid">
98
-          <CardCount :products="productCounts" />
96
+          <CardCount :products="productAmount" />
99
         </div>
97
         </div>
100
       </div>
98
       </div>
101
 
99
 
105
             <div class="card">
103
             <div class="card">
106
               <h5>Pembelian dan Penjualan</h5>
104
               <h5>Pembelian dan Penjualan</h5>
107
 
105
 
108
-              <Chart
109
-                type="line"
110
-                :data="purchaseAndSale"
111
-                :options="lineOptions"
112
-              />
106
+              <Chart type="line" :data="salePurchase" />
113
             </div>
107
             </div>
114
           </div>
108
           </div>
115
 
109
 
125
             <div class="card">
119
             <div class="card">
126
               <h5>Pembelian</h5>
120
               <h5>Pembelian</h5>
127
 
121
 
128
-              <Chart type="bar" :data="barData" :options="lineOptions" />
122
+              <Chart type="bar" :data="barData" />
129
             </div>
123
             </div>
130
           </div>
124
           </div>
131
 
125
 
133
             <div class="card">
127
             <div class="card">
134
               <h5>Pendapatan</h5>
128
               <h5>Pendapatan</h5>
135
 
129
 
136
-              <Chart type="bar" :data="barData" :options="lineOptions" />
130
+              <Chart type="bar" :data="barData" />
137
             </div>
131
             </div>
138
           </div>
132
           </div>
139
         </div>
133
         </div>

+ 3
- 3
resources/views/PDF/Purchases/Invoice.blade.php Wyświetl plik

160
                         <td>{{ $purchaseDetail->qty }}</td>
160
                         <td>{{ $purchaseDetail->qty }}</td>
161
                         <td>UNIT</td>
161
                         <td>UNIT</td>
162
                         <td style="text-align: right;">
162
                         <td style="text-align: right;">
163
-                            {{ App\Services\HelperService::rupiahFormat($purchaseDetail->price) }}
163
+                            {{ App\Services\FunctionService::rupiahFormat($purchaseDetail->price) }}
164
                         </td>
164
                         </td>
165
                         <td style="text-align: right;">
165
                         <td style="text-align: right;">
166
-                            {{ App\Services\HelperService::rupiahFormat($purchaseDetail->price * $purchaseDetail->qty) }}
166
+                            {{ App\Services\FunctionService::rupiahFormat($purchaseDetail->price * $purchaseDetail->qty) }}
167
                         </td>
167
                         </td>
168
                     </tr>
168
                     </tr>
169
                 @endforeach
169
                 @endforeach
172
                 <tr>
172
                 <tr>
173
                     <td colspan="4"></td>
173
                     <td colspan="4"></td>
174
                     <td>TOTAL</td>
174
                     <td>TOTAL</td>
175
-                    <td>{{ App\Services\HelperService::rupiahFormat(App\Services\PurchaseService::totalPrice($purchase)) }}
175
+                    <td>{{ App\Services\FunctionService::rupiahFormat(App\Services\PurchaseService::totalPrice($purchase)) }}
176
                     </td>
176
                     </td>
177
                 </tr>
177
                 </tr>
178
                 {{-- <tr>
178
                 {{-- <tr>

+ 3
- 3
resources/views/PDF/Sales/Invoice.blade.php Wyświetl plik

160
                         <td>{{ $saleDetail->qty }}</td>
160
                         <td>{{ $saleDetail->qty }}</td>
161
                         <td>UNIT</td>
161
                         <td>UNIT</td>
162
                         <td style="text-align: right;">
162
                         <td style="text-align: right;">
163
-                            {{ App\Services\HelperService::rupiahFormat($saleDetail->price) }}</td>
163
+                            {{ App\Services\FunctionService::rupiahFormat($saleDetail->price) }}</td>
164
                         <td style="text-align: right;">
164
                         <td style="text-align: right;">
165
-                            {{ App\Services\HelperService::rupiahFormat($saleDetail->price * $saleDetail->qty) }}
165
+                            {{ App\Services\FunctionService::rupiahFormat($saleDetail->price * $saleDetail->qty) }}
166
                         </td>
166
                         </td>
167
                     </tr>
167
                     </tr>
168
                 @endforeach
168
                 @endforeach
171
                 <tr>
171
                 <tr>
172
                     <td colspan="4"></td>
172
                     <td colspan="4"></td>
173
                     <td>TOTAL</td>
173
                     <td>TOTAL</td>
174
-                    <td>{{ App\Services\HelperService::rupiahFormat(App\Services\SaleService::totalPrice($sale)) }}
174
+                    <td>{{ App\Services\FunctionService::rupiahFormat(App\Services\SaleService::totalPrice($sale)) }}
175
                     </td>
175
                     </td>
176
                 </tr>
176
                 </tr>
177
                 {{-- <tr>
177
                 {{-- <tr>