瀏覽代碼

refactor and add company stats

3.x
Andrew Wallo 2 年之前
父節點
當前提交
4fbc7aa1a8

+ 3
- 2
app/Filament/Pages/Companies.php 查看文件

25
     protected function getHeaderWidgets(): array
25
     protected function getHeaderWidgets(): array
26
     {
26
     {
27
         return [
27
         return [
28
-            Widgets\CumulativeCompanyData::class,
29
-            Widgets\Companies::class,
28
+            Widgets\Companies\Charts\CompanyStatsOverview::class,
29
+            Widgets\Companies\Charts\CumulativeCompanyData::class,
30
+            Widgets\Companies\Tables\Companies::class,
30
         ];
31
         ];
31
     }
32
     }
32
 
33
 

+ 2
- 2
app/Filament/Pages/Employees.php 查看文件

25
     protected function getHeaderWidgets(): array
25
     protected function getHeaderWidgets(): array
26
     {
26
     {
27
         return [
27
         return [
28
-            Widgets\CumulativeEmployeeData::class,
29
-            Widgets\Employees::class,
28
+            Widgets\Employees\Charts\CumulativeEmployeeData::class,
29
+            Widgets\Employees\Tables\Employees::class,
30
         ];
30
         ];
31
     }
31
     }
32
 
32
 

+ 2
- 2
app/Filament/Pages/Users.php 查看文件

25
     protected function getHeaderWidgets(): array
25
     protected function getHeaderWidgets(): array
26
     {
26
     {
27
         return [
27
         return [
28
-            Widgets\CumulativeUserData::class,
29
-            Widgets\Users::class,
28
+            Widgets\Users\Charts\CumulativeUserData::class,
29
+            Widgets\Users\Tables\Users::class,
30
         ];
30
         ];
31
     }
31
     }
32
 
32
 

+ 97
- 0
app/Filament/Pages/Widgets/Companies/Charts/CompanyStatsOverview.php 查看文件

1
+<?php
2
+
3
+namespace App\Filament\Pages\Widgets\Companies\Charts;
4
+
5
+use App\Models\Company;
6
+use Filament\Widgets\StatsOverviewWidget;
7
+
8
+class CompanyStatsOverview extends StatsOverviewWidget
9
+{
10
+    protected int|string|array $columnSpan = 3;
11
+
12
+    protected function getColumns(): int
13
+    {
14
+        return 3;
15
+    }
16
+
17
+    /**
18
+     * Holt's Linear Trend
19
+     */
20
+    protected function holtLinearTrend($data, $alpha, $beta): array
21
+    {
22
+        $level = $data[0];
23
+        $trend = $data[1] - $data[0];
24
+
25
+        $forecast = [];
26
+        for ($i = 0; $i < count($data); $i++) {
27
+            $prev_level = $level;
28
+            $level = $alpha * $data[$i] + (1 - $alpha) * ($prev_level + $trend);
29
+            $trend = $beta * ($level - $prev_level) + (1 - $beta) * $trend;
30
+            $forecast[] = $level + $trend;
31
+        }
32
+
33
+        return $forecast;
34
+    }
35
+
36
+    /**
37
+     * Chart Options
38
+     */
39
+    protected function getCards(): array
40
+    {
41
+        // Define constants
42
+        $alpha = 0.8;
43
+        $beta = 0.2;
44
+
45
+        // Define time variables
46
+        $startOfYear = today()->startOfYear();
47
+        $today = today();
48
+
49
+        // Get Company Data
50
+        $companyData = Company::selectRaw("COUNT(*) as aggregate, YEARWEEK(created_at, 3) as week")
51
+            ->whereBetween('created_at', [$startOfYear, $today])
52
+            ->groupByRaw('week')
53
+            ->get();
54
+
55
+        // Initialize weeks
56
+        $weeks = [];
57
+        for ($week = $startOfYear->copy(); $week->lte($today); $week->addWeek()) {
58
+            $weeks[$week->format('oW')] = 0;
59
+        }
60
+
61
+        // Get Weekly Data
62
+        $weeklyData = collect($weeks)->mapWithKeys(static function ($value, $week) use ($companyData) {
63
+            $matchingData = $companyData->firstWhere('week', $week);
64
+            return [$week => $matchingData ? $matchingData->aggregate : 0];
65
+        });
66
+
67
+        // Calculate total companies
68
+        $totalCompanies = $weeklyData->reduce(static function ($carry, $value) {
69
+            $carry[] = ($carry ? end($carry) : 0) + $value;
70
+            return $carry;
71
+        }, []);
72
+
73
+        // Calculate new companies and percentage change
74
+        $newCompanies = [0];
75
+        $weeklyPercentageChange = [0];
76
+        for ($i = 1; $i < count($totalCompanies); $i++) {
77
+            $newCompanies[] = $totalCompanies[$i] - $totalCompanies[$i - 1];
78
+            $weeklyPercentageChange[] = ($newCompanies[$i] / $totalCompanies[$i - 1]) * 100;
79
+        }
80
+
81
+        // Calculate average weekly growth rate
82
+        $totalWeeks = $startOfYear->diffInWeeks($today);
83
+        $averageWeeklyGrowthRate = round(array_sum($weeklyPercentageChange) / ($totalWeeks), 2);
84
+
85
+        // Calculate Holt's forecast
86
+        $weeklyDataArray = $weeklyData->values()->toArray();
87
+        $holt_forecast = $this->holtLinearTrend($weeklyDataArray, $alpha, $beta);
88
+        $expectedNewCompanies = round(end($holt_forecast));
89
+
90
+        // Prepare cards for return
91
+        return [
92
+            StatsOverviewWidget\Card::make("New Companies Forecast (Holt's Trend)", $expectedNewCompanies),
93
+            StatsOverviewWidget\Card::make('Average Weekly Growth Rate', $averageWeeklyGrowthRate . '%'),
94
+            StatsOverviewWidget\Card::make('Personal Companies', Company::sum('personal_company')),
95
+        ];
96
+    }
97
+}

app/Filament/Pages/Widgets/CumulativeCompanyData.php → app/Filament/Pages/Widgets/Companies/Charts/CumulativeCompanyData.php 查看文件

1
 <?php
1
 <?php
2
 
2
 
3
-namespace App\Filament\Pages\Widgets;
3
+namespace App\Filament\Pages\Widgets\Companies\Charts;
4
 
4
 
5
 use App\Models\Company;
5
 use App\Models\Company;
6
 use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget;
6
 use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget;
54
 
54
 
55
         // Calculate percentage increase and increase in companies per week
55
         // Calculate percentage increase and increase in companies per week
56
         $newCompanies = [0];
56
         $newCompanies = [0];
57
-        $weeklyGrowthRate = [0];
58
-
59
-        $cumulativeDataLength = count($totalCompanies);
60
-        for ($key = 1; $key < $cumulativeDataLength; $key++) {
61
-            $value = $totalCompanies[$key];
62
-            $previousWeekValue = $totalCompanies[$key - 1];
63
-            $newCompanies[] = $value - $previousWeekValue;
64
-            $weeklyGrowthRate[] = round((($value - $previousWeekValue) / $previousWeekValue) * 100, 2);
57
+        $weeklyPercentageChange = [0];
58
+
59
+        for ($i = 1; $i < count($totalCompanies); $i++) {
60
+            $newCompanies[] = $totalCompanies[$i] - $totalCompanies[$i - 1];
61
+            $weeklyPercentageChange[] = ($newCompanies[$i] / $totalCompanies[$i - 1]) * 100;
62
+        }
63
+
64
+        // Calculate exponential smoothing for total companies
65
+        $alpha = 0.3; // Smoothing factor, between 0 and 1
66
+        $smoothedTotalCompanies = [];
67
+
68
+        $smoothedTotalCompanies[0] = $totalCompanies[0]; // Initialize the first smoothed value
69
+        for ($i = 1; $i < count($totalCompanies); $i++) {
70
+            $smoothedTotalCompanies[$i] = $alpha * $totalCompanies[$i] + (1 - $alpha) * $smoothedTotalCompanies[$i - 1];
65
         }
71
         }
66
 
72
 
67
         $labels = collect($weeks)->keys()->map(static function ($week) {
73
         $labels = collect($weeks)->keys()->map(static function ($week) {
84
                 [
90
                 [
85
                     'name' => 'Weekly Growth Rate',
91
                     'name' => 'Weekly Growth Rate',
86
                     'type' => 'area',
92
                     'type' => 'area',
87
-                    'data' => $weeklyGrowthRate,
93
+                    'data' => $weeklyPercentageChange,
88
                 ],
94
                 ],
89
                 [
95
                 [
90
                     'name' => 'New Companies',
96
                     'name' => 'New Companies',
91
                     'type' => 'line',
97
                     'type' => 'line',
92
                     'data' => $newCompanies,
98
                     'data' => $newCompanies,
93
                 ],
99
                 ],
100
+                [
101
+                    'name' => 'Smoothed Total Companies',
102
+                    'type' => 'line',
103
+                    'data' => $smoothedTotalCompanies,
104
+                ],
94
                 [
105
                 [
95
                     'name' => 'Total Companies',
106
                     'name' => 'Total Companies',
96
                     'type' => 'column',
107
                     'type' => 'column',
110
             'yaxis' => [
121
             'yaxis' => [
111
                 [
122
                 [
112
                     'seriesName' => 'Weekly Growth Rate',
123
                     'seriesName' => 'Weekly Growth Rate',
124
+                    'decimalsInFloat' => 2,
113
                     'labels' => [
125
                     'labels' => [
114
                         'style' => [
126
                         'style' => [
115
                             'colors' => '#9ca3af',
127
                             'colors' => '#9ca3af',
128
                         ],
140
                         ],
129
                     ],
141
                     ],
130
                 ],
142
                 ],
143
+                [
144
+                    'seriesName' => 'Smoothed Total Companies',
145
+                    'decimalsInFloat' => 0,
146
+                    'opposite' => true,
147
+                    'labels' => [
148
+                        'style' => [
149
+                            'colors' => '#9ca3af',
150
+                            'fontWeight' => 600,
151
+                        ],
152
+                    ],
153
+                ],
131
                 [
154
                 [
132
                     'seriesName' => 'Total Companies',
155
                     'seriesName' => 'Total Companies',
133
                     'decimalsInFloat' => 0,
156
                     'decimalsInFloat' => 0,
151
             'markers' => [
174
             'markers' => [
152
                 'size' => 0,
175
                 'size' => 0,
153
             ],
176
             ],
154
-            'colors' => ['#d946ef', '#6d28d9', '#3b82f6'],
177
+            'colors' => ['#d946ef', '#6d28d9', '#14b8a6', '#3b82f6'],
155
             'fill' => [
178
             'fill' => [
156
                 'type' => 'gradient',
179
                 'type' => 'gradient',
157
                 'gradient' => [
180
                 'gradient' => [
158
                     'shade' => 'dark',
181
                     'shade' => 'dark',
159
                     'type' => 'vertical',
182
                     'type' => 'vertical',
160
                     'shadeIntensity' => 0.5,
183
                     'shadeIntensity' => 0.5,
161
-                    'gradientToColors' => ['#d946ef', '#6d28d9', '#0ea5e9'],
184
+                    'gradientToColors' => ['#d946ef', '#6d28d9', '#14b8a6', '#0ea5e9'],
162
                     'inverseColors' => false,
185
                     'inverseColors' => false,
163
-                    'opacityFrom' => [0.85, 1, 0.75],
164
-                    'opacityTo' => [0.4, 0.85, 1],
186
+                    'opacityFrom' => [0.85, 1, 1, 0.75],
187
+                    'opacityTo' => [0.4, 0.85, 0.85, 1],
165
                     'stops' => [0, 20, 80, 100],
188
                     'stops' => [0, 20, 80, 100],
166
                 ],
189
                 ],
167
             ],
190
             ],
168
             'stroke' => [
191
             'stroke' => [
169
-                'width' => [2, 5, 0],
192
+                'width' => [2, 5, 5, 0],
170
                 'curve' => 'smooth',
193
                 'curve' => 'smooth',
171
             ],
194
             ],
172
             'plotOptions' => [
195
             'plotOptions' => [

app/Filament/Pages/Widgets/Companies.php → app/Filament/Pages/Widgets/Companies/Tables/Companies.php 查看文件

1
 <?php
1
 <?php
2
 
2
 
3
-namespace App\Filament\Pages\Widgets;
3
+namespace App\Filament\Pages\Widgets\Companies\Tables;
4
 
4
 
5
 use App\Models\Company;
5
 use App\Models\Company;
6
 use Closure;
6
 use Closure;

app/Filament/Pages/Widgets/CumulativeEmployeeData.php → app/Filament/Pages/Widgets/Employees/Charts/CumulativeEmployeeData.php 查看文件

1
 <?php
1
 <?php
2
 
2
 
3
-namespace App\Filament\Pages\Widgets;
3
+namespace App\Filament\Pages\Widgets\Employees\Charts;
4
 
4
 
5
 use App\Models\Employeeship;
5
 use App\Models\Employeeship;
6
 use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget;
6
 use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget;
54
             ];
54
             ];
55
         });
55
         });
56
 
56
 
57
-        $cumulativeEditors = $weeklyRoleData->reduce(function ($carry, $value) {
57
+        $cumulativeEditors = $weeklyRoleData->reduce(static function ($carry, $value) {
58
             $carry[] = ($carry ? end($carry) : 0) + $value['editors'];
58
             $carry[] = ($carry ? end($carry) : 0) + $value['editors'];
59
             return $carry;
59
             return $carry;
60
         }, []);
60
         }, []);
61
 
61
 
62
-        $cumulativeAdmins = $weeklyRoleData->reduce(function ($carry, $value) {
62
+        $cumulativeAdmins = $weeklyRoleData->reduce(static function ($carry, $value) {
63
             $carry[] = ($carry ? end($carry) : 0) + $value['admins'];
63
             $carry[] = ($carry ? end($carry) : 0) + $value['admins'];
64
             return $carry;
64
             return $carry;
65
         }, []);
65
         }, []);
85
 
85
 
86
         return [
86
         return [
87
             'chart' => [
87
             'chart' => [
88
-                'type' => 'line',
88
+                'type' => 'area',
89
                 'height' => 350,
89
                 'height' => 350,
90
                 'stacked' => true,
90
                 'stacked' => true,
91
                 'toolbar' => [
91
                 'toolbar' => [

app/Filament/Pages/Widgets/Employees.php → app/Filament/Pages/Widgets/Employees/Tables/Employees.php 查看文件

1
 <?php
1
 <?php
2
 
2
 
3
-namespace App\Filament\Pages\Widgets;
3
+namespace App\Filament\Pages\Widgets\Employees\Tables;
4
 
4
 
5
 use App\Models\User;
5
 use App\Models\User;
6
 use Closure;
6
 use Closure;

app/Filament/Pages/Widgets/CumulativeUserData.php → app/Filament/Pages/Widgets/Users/Charts/CumulativeUserData.php 查看文件

1
 <?php
1
 <?php
2
 
2
 
3
-namespace App\Filament\Pages\Widgets;
3
+namespace App\Filament\Pages\Widgets\Users\Charts;
4
 
4
 
5
 use App\Models\User;
5
 use App\Models\User;
6
 use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget;
6
 use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget;

app/Filament/Pages/Widgets/Users.php → app/Filament/Pages/Widgets/Users/Tables/Users.php 查看文件

1
 <?php
1
 <?php
2
 
2
 
3
-namespace App\Filament\Pages\Widgets;
3
+namespace App\Filament\Pages\Widgets\Users\Tables;
4
 
4
 
5
 use App\Models\User;
5
 use App\Models\User;
6
 use Closure;
6
 use Closure;

+ 38
- 38
composer.lock 查看文件

934
         },
934
         },
935
         {
935
         {
936
             "name": "filament/filament",
936
             "name": "filament/filament",
937
-            "version": "v2.17.36",
937
+            "version": "v2.17.38",
938
             "source": {
938
             "source": {
939
                 "type": "git",
939
                 "type": "git",
940
                 "url": "https://github.com/filamentphp/app.git",
940
                 "url": "https://github.com/filamentphp/app.git",
941
-                "reference": "c62290398a1d6b03351dbab8158115efd936deaa"
941
+                "reference": "0719a1fcebcad120dd4e254938cfb08470c90105"
942
             },
942
             },
943
             "dist": {
943
             "dist": {
944
                 "type": "zip",
944
                 "type": "zip",
945
-                "url": "https://api.github.com/repos/filamentphp/app/zipball/c62290398a1d6b03351dbab8158115efd936deaa",
946
-                "reference": "c62290398a1d6b03351dbab8158115efd936deaa",
945
+                "url": "https://api.github.com/repos/filamentphp/app/zipball/0719a1fcebcad120dd4e254938cfb08470c90105",
946
+                "reference": "0719a1fcebcad120dd4e254938cfb08470c90105",
947
                 "shasum": ""
947
                 "shasum": ""
948
             },
948
             },
949
             "require": {
949
             "require": {
993
                 "issues": "https://github.com/filamentphp/filament/issues",
993
                 "issues": "https://github.com/filamentphp/filament/issues",
994
                 "source": "https://github.com/filamentphp/filament"
994
                 "source": "https://github.com/filamentphp/filament"
995
             },
995
             },
996
-            "time": "2023-05-05T08:37:23+00:00"
996
+            "time": "2023-05-08T15:39:08+00:00"
997
         },
997
         },
998
         {
998
         {
999
             "name": "filament/forms",
999
             "name": "filament/forms",
1000
-            "version": "v2.17.36",
1000
+            "version": "v2.17.38",
1001
             "source": {
1001
             "source": {
1002
                 "type": "git",
1002
                 "type": "git",
1003
                 "url": "https://github.com/filamentphp/forms.git",
1003
                 "url": "https://github.com/filamentphp/forms.git",
1004
-                "reference": "b29e2f817ad63913ae1b339910726ede6696de9a"
1004
+                "reference": "49bafbf87f0d7f23e7b62a6d40591fd3ea81a55b"
1005
             },
1005
             },
1006
             "dist": {
1006
             "dist": {
1007
                 "type": "zip",
1007
                 "type": "zip",
1008
-                "url": "https://api.github.com/repos/filamentphp/forms/zipball/b29e2f817ad63913ae1b339910726ede6696de9a",
1009
-                "reference": "b29e2f817ad63913ae1b339910726ede6696de9a",
1008
+                "url": "https://api.github.com/repos/filamentphp/forms/zipball/49bafbf87f0d7f23e7b62a6d40591fd3ea81a55b",
1009
+                "reference": "49bafbf87f0d7f23e7b62a6d40591fd3ea81a55b",
1010
                 "shasum": ""
1010
                 "shasum": ""
1011
             },
1011
             },
1012
             "require": {
1012
             "require": {
1051
                 "issues": "https://github.com/filamentphp/filament/issues",
1051
                 "issues": "https://github.com/filamentphp/filament/issues",
1052
                 "source": "https://github.com/filamentphp/filament"
1052
                 "source": "https://github.com/filamentphp/filament"
1053
             },
1053
             },
1054
-            "time": "2023-05-04T23:08:13+00:00"
1054
+            "time": "2023-05-08T09:55:16+00:00"
1055
         },
1055
         },
1056
         {
1056
         {
1057
             "name": "filament/notifications",
1057
             "name": "filament/notifications",
1058
-            "version": "v2.17.36",
1058
+            "version": "v2.17.38",
1059
             "source": {
1059
             "source": {
1060
                 "type": "git",
1060
                 "type": "git",
1061
                 "url": "https://github.com/filamentphp/notifications.git",
1061
                 "url": "https://github.com/filamentphp/notifications.git",
1108
         },
1108
         },
1109
         {
1109
         {
1110
             "name": "filament/support",
1110
             "name": "filament/support",
1111
-            "version": "v2.17.36",
1111
+            "version": "v2.17.38",
1112
             "source": {
1112
             "source": {
1113
                 "type": "git",
1113
                 "type": "git",
1114
                 "url": "https://github.com/filamentphp/support.git",
1114
                 "url": "https://github.com/filamentphp/support.git",
1158
         },
1158
         },
1159
         {
1159
         {
1160
             "name": "filament/tables",
1160
             "name": "filament/tables",
1161
-            "version": "v2.17.36",
1161
+            "version": "v2.17.38",
1162
             "source": {
1162
             "source": {
1163
                 "type": "git",
1163
                 "type": "git",
1164
                 "url": "https://github.com/filamentphp/tables.git",
1164
                 "url": "https://github.com/filamentphp/tables.git",
1165
-                "reference": "f9862eb6d9af85c98512924e9f0d84d6eb1ff4f5"
1165
+                "reference": "b23b5cc95c7b1afb650b366545942b1ccad993af"
1166
             },
1166
             },
1167
             "dist": {
1167
             "dist": {
1168
                 "type": "zip",
1168
                 "type": "zip",
1169
-                "url": "https://api.github.com/repos/filamentphp/tables/zipball/f9862eb6d9af85c98512924e9f0d84d6eb1ff4f5",
1170
-                "reference": "f9862eb6d9af85c98512924e9f0d84d6eb1ff4f5",
1169
+                "url": "https://api.github.com/repos/filamentphp/tables/zipball/b23b5cc95c7b1afb650b366545942b1ccad993af",
1170
+                "reference": "b23b5cc95c7b1afb650b366545942b1ccad993af",
1171
                 "shasum": ""
1171
                 "shasum": ""
1172
             },
1172
             },
1173
             "require": {
1173
             "require": {
1210
                 "issues": "https://github.com/filamentphp/filament/issues",
1210
                 "issues": "https://github.com/filamentphp/filament/issues",
1211
                 "source": "https://github.com/filamentphp/filament"
1211
                 "source": "https://github.com/filamentphp/filament"
1212
             },
1212
             },
1213
-            "time": "2023-05-04T23:08:16+00:00"
1213
+            "time": "2023-05-08T09:55:33+00:00"
1214
         },
1214
         },
1215
         {
1215
         {
1216
             "name": "flowframe/laravel-trend",
1216
             "name": "flowframe/laravel-trend",
1833
         },
1833
         },
1834
         {
1834
         {
1835
             "name": "laravel/fortify",
1835
             "name": "laravel/fortify",
1836
-            "version": "v1.17.1",
1836
+            "version": "v1.17.2",
1837
             "source": {
1837
             "source": {
1838
                 "type": "git",
1838
                 "type": "git",
1839
                 "url": "https://github.com/laravel/fortify.git",
1839
                 "url": "https://github.com/laravel/fortify.git",
1840
-                "reference": "76908639d6c58a4996ce8bbacea9ec7f610b2ec6"
1840
+                "reference": "fc4b9b00b0d657dd035751b286f412976596ba32"
1841
             },
1841
             },
1842
             "dist": {
1842
             "dist": {
1843
                 "type": "zip",
1843
                 "type": "zip",
1844
-                "url": "https://api.github.com/repos/laravel/fortify/zipball/76908639d6c58a4996ce8bbacea9ec7f610b2ec6",
1845
-                "reference": "76908639d6c58a4996ce8bbacea9ec7f610b2ec6",
1844
+                "url": "https://api.github.com/repos/laravel/fortify/zipball/fc4b9b00b0d657dd035751b286f412976596ba32",
1845
+                "reference": "fc4b9b00b0d657dd035751b286f412976596ba32",
1846
                 "shasum": ""
1846
                 "shasum": ""
1847
             },
1847
             },
1848
             "require": {
1848
             "require": {
1893
                 "issues": "https://github.com/laravel/fortify/issues",
1893
                 "issues": "https://github.com/laravel/fortify/issues",
1894
                 "source": "https://github.com/laravel/fortify"
1894
                 "source": "https://github.com/laravel/fortify"
1895
             },
1895
             },
1896
-            "time": "2023-04-19T15:48:59+00:00"
1896
+            "time": "2023-04-26T13:35:07+00:00"
1897
         },
1897
         },
1898
         {
1898
         {
1899
             "name": "laravel/framework",
1899
             "name": "laravel/framework",
1900
-            "version": "v10.9.0",
1900
+            "version": "v10.10.0",
1901
             "source": {
1901
             "source": {
1902
                 "type": "git",
1902
                 "type": "git",
1903
                 "url": "https://github.com/laravel/framework.git",
1903
                 "url": "https://github.com/laravel/framework.git",
1904
-                "reference": "35078125f61ef0b125edf524de934f108d4b47fd"
1904
+                "reference": "0da22a8d179f79b49d4e71f4822f759651f35012"
1905
             },
1905
             },
1906
             "dist": {
1906
             "dist": {
1907
                 "type": "zip",
1907
                 "type": "zip",
1908
-                "url": "https://api.github.com/repos/laravel/framework/zipball/35078125f61ef0b125edf524de934f108d4b47fd",
1909
-                "reference": "35078125f61ef0b125edf524de934f108d4b47fd",
1908
+                "url": "https://api.github.com/repos/laravel/framework/zipball/0da22a8d179f79b49d4e71f4822f759651f35012",
1909
+                "reference": "0da22a8d179f79b49d4e71f4822f759651f35012",
1910
                 "shasum": ""
1910
                 "shasum": ""
1911
             },
1911
             },
1912
             "require": {
1912
             "require": {
2093
                 "issues": "https://github.com/laravel/framework/issues",
2093
                 "issues": "https://github.com/laravel/framework/issues",
2094
                 "source": "https://github.com/laravel/framework"
2094
                 "source": "https://github.com/laravel/framework"
2095
             },
2095
             },
2096
-            "time": "2023-04-25T13:47:18+00:00"
2096
+            "time": "2023-05-09T13:08:05+00:00"
2097
         },
2097
         },
2098
         {
2098
         {
2099
             "name": "laravel/sanctum",
2099
             "name": "laravel/sanctum",
7898
         },
7898
         },
7899
         {
7899
         {
7900
             "name": "laravel/sail",
7900
             "name": "laravel/sail",
7901
-            "version": "v1.21.5",
7901
+            "version": "v1.22.0",
7902
             "source": {
7902
             "source": {
7903
                 "type": "git",
7903
                 "type": "git",
7904
                 "url": "https://github.com/laravel/sail.git",
7904
                 "url": "https://github.com/laravel/sail.git",
7905
-                "reference": "27af207bb1c53faddcba34c7528b3e969f6a646d"
7905
+                "reference": "923e1e112b6a8598664dbb0ee79dd3137f1c9d56"
7906
             },
7906
             },
7907
             "dist": {
7907
             "dist": {
7908
                 "type": "zip",
7908
                 "type": "zip",
7909
-                "url": "https://api.github.com/repos/laravel/sail/zipball/27af207bb1c53faddcba34c7528b3e969f6a646d",
7910
-                "reference": "27af207bb1c53faddcba34c7528b3e969f6a646d",
7909
+                "url": "https://api.github.com/repos/laravel/sail/zipball/923e1e112b6a8598664dbb0ee79dd3137f1c9d56",
7910
+                "reference": "923e1e112b6a8598664dbb0ee79dd3137f1c9d56",
7911
                 "shasum": ""
7911
                 "shasum": ""
7912
             },
7912
             },
7913
             "require": {
7913
             "require": {
7914
                 "illuminate/console": "^8.0|^9.0|^10.0",
7914
                 "illuminate/console": "^8.0|^9.0|^10.0",
7915
                 "illuminate/contracts": "^8.0|^9.0|^10.0",
7915
                 "illuminate/contracts": "^8.0|^9.0|^10.0",
7916
                 "illuminate/support": "^8.0|^9.0|^10.0",
7916
                 "illuminate/support": "^8.0|^9.0|^10.0",
7917
-                "php": "^7.3|^8.0",
7917
+                "php": "^8.0",
7918
                 "symfony/yaml": "^6.0"
7918
                 "symfony/yaml": "^6.0"
7919
             },
7919
             },
7920
             "require-dev": {
7920
             "require-dev": {
7959
                 "issues": "https://github.com/laravel/sail/issues",
7959
                 "issues": "https://github.com/laravel/sail/issues",
7960
                 "source": "https://github.com/laravel/sail"
7960
                 "source": "https://github.com/laravel/sail"
7961
             },
7961
             },
7962
-            "time": "2023-04-24T13:29:38+00:00"
7962
+            "time": "2023-05-04T14:52:56+00:00"
7963
         },
7963
         },
7964
         {
7964
         {
7965
             "name": "mockery/mockery",
7965
             "name": "mockery/mockery",
9895
         },
9895
         },
9896
         {
9896
         {
9897
             "name": "spatie/laravel-ignition",
9897
             "name": "spatie/laravel-ignition",
9898
-            "version": "2.1.1",
9898
+            "version": "2.1.2",
9899
             "source": {
9899
             "source": {
9900
                 "type": "git",
9900
                 "type": "git",
9901
                 "url": "https://github.com/spatie/laravel-ignition.git",
9901
                 "url": "https://github.com/spatie/laravel-ignition.git",
9902
-                "reference": "802c7e27754456e45134f1a9d29ab7df4b6cb9e4"
9902
+                "reference": "2f99fa6b732a6049e78ed34e4608ce589605ae54"
9903
             },
9903
             },
9904
             "dist": {
9904
             "dist": {
9905
                 "type": "zip",
9905
                 "type": "zip",
9906
-                "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/802c7e27754456e45134f1a9d29ab7df4b6cb9e4",
9907
-                "reference": "802c7e27754456e45134f1a9d29ab7df4b6cb9e4",
9906
+                "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2f99fa6b732a6049e78ed34e4608ce589605ae54",
9907
+                "reference": "2f99fa6b732a6049e78ed34e4608ce589605ae54",
9908
                 "shasum": ""
9908
                 "shasum": ""
9909
             },
9909
             },
9910
             "require": {
9910
             "require": {
9983
                     "type": "github"
9983
                     "type": "github"
9984
                 }
9984
                 }
9985
             ],
9985
             ],
9986
-            "time": "2023-05-04T13:54:49+00:00"
9986
+            "time": "2023-05-09T07:19:31+00:00"
9987
         },
9987
         },
9988
         {
9988
         {
9989
             "name": "symfony/yaml",
9989
             "name": "symfony/yaml",

Loading…
取消
儲存