Bozhidar Slaveykov hai 1 ano
pai
achega
90165e023d

+ 58 - 0
web/app/Providers/Filament/AdminPanelProvider.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace App\Providers\Filament;
+
+use Filament\Http\Middleware\Authenticate;
+use Filament\Http\Middleware\DisableBladeIconComponents;
+use Filament\Http\Middleware\DispatchServingFilamentEvent;
+use Filament\Pages;
+use Filament\Panel;
+use Filament\PanelProvider;
+use Filament\Support\Colors\Color;
+use Filament\Widgets;
+use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
+use Illuminate\Cookie\Middleware\EncryptCookies;
+use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
+use Illuminate\Routing\Middleware\SubstituteBindings;
+use Illuminate\Session\Middleware\AuthenticateSession;
+use Illuminate\Session\Middleware\StartSession;
+use Illuminate\View\Middleware\ShareErrorsFromSession;
+
+class AdminPanelProvider extends PanelProvider
+{
+    public function panel(Panel $panel): Panel
+    {
+        return $panel
+            ->default()
+            ->id('admin')
+            ->path('admin')
+            ->login()
+            ->colors([
+                'primary' => Color::Amber,
+            ])
+            ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
+            ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
+            ->pages([
+                Pages\Dashboard::class,
+            ])
+            ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
+            ->widgets([
+                Widgets\AccountWidget::class,
+                Widgets\FilamentInfoWidget::class,
+            ])
+            ->middleware([
+                EncryptCookies::class,
+                AddQueuedCookiesToResponse::class,
+                StartSession::class,
+                AuthenticateSession::class,
+                ShareErrorsFromSession::class,
+                VerifyCsrfToken::class,
+                SubstituteBindings::class,
+                DisableBladeIconComponents::class,
+                DispatchServingFilamentEvent::class,
+            ])
+            ->authMiddleware([
+                Authenticate::class,
+            ]);
+    }
+}

+ 7 - 2
web/composer.json

@@ -2,10 +2,14 @@
     "name": "laravel/laravel",
     "type": "project",
     "description": "The skeleton application for the Laravel framework.",
-    "keywords": ["laravel", "framework"],
+    "keywords": [
+        "laravel",
+        "framework"
+    ],
     "license": "MIT",
     "require": {
         "php": "^8.1",
+        "filament/filament": "^3.0-stable",
         "guzzlehttp/guzzle": "^7.2",
         "laravel/framework": "^10.10",
         "laravel/sanctum": "^3.3",
@@ -35,7 +39,8 @@
     "scripts": {
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
-            "@php artisan package:discover --ansi"
+            "@php artisan package:discover --ansi",
+            "@php artisan filament:upgrade"
         ],
         "post-update-cmd": [
             "@php artisan vendor:publish --tag=laravel-assets --ansi --force"

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1191 - 164
web/composer.lock


+ 2 - 1
web/config/app.php

@@ -16,7 +16,7 @@ return [
     |
     */
 
-    'name' => env('APP_NAME', 'Laravel'),
+    'name' => 'AlphaX - Hosting Panel',
 
     /*
     |--------------------------------------------------------------------------
@@ -167,6 +167,7 @@ return [
         App\Providers\AuthServiceProvider::class,
         // App\Providers\BroadcastServiceProvider::class,
         App\Providers\EventServiceProvider::class,
+        App\Providers\Filament\AdminPanelProvider::class,
         App\Providers\RouteServiceProvider::class,
     ])->toArray(),
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/css/filament/filament/app.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/css/filament/forms/forms.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/css/filament/support/support.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/filament/app.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/filament/echo.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/forms/components/color-picker.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/forms/components/date-time-picker.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/forms/components/file-upload.js


+ 1 - 0
web/public/js/filament/forms/components/key-value.js

@@ -0,0 +1 @@
+function r({state:i}){return{state:i,rows:[],shouldUpdateRows:!0,init:function(){this.updateRows(),this.rows.length<=0&&this.addRow(),this.updateState(),this.$watch("state",(t,e)=>{let s=o=>o===null?0:Array.isArray(o)?o.length:typeof o!="object"?0:Object.keys(o).length;s(t)===0&&s(e)===0||this.updateRows()})},addRow:function(){this.rows.push({key:"",value:""}),this.updateState()},deleteRow:function(t){this.rows.splice(t,1),this.rows.length<=0&&this.addRow(),this.updateState()},reorderRows:function(t){let e=Alpine.raw(this.rows),s=e.splice(t.oldIndex,1)[0];e.splice(t.newIndex,0,s),this.rows=e,this.updateState()},updateRows:function(){if(!this.shouldUpdateRows){this.shouldUpdateRows=!0;return}let t=[];for(let[e,s]of Object.entries(this.state??{}))t.push({key:e,value:s});this.rows=t},updateState:function(){let t={};this.rows.forEach(e=>{e.key===""||e.key===null||(t[e.key]=e.value)}),this.shouldUpdateRows=!1,this.state=t}}}export{r as default};

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/forms/components/markdown-editor.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/forms/components/rich-editor.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/forms/components/select.js


+ 1 - 0
web/public/js/filament/forms/components/tags-input.js

@@ -0,0 +1 @@
+function i({state:a,splitKeys:n}){return{newTag:"",state:a,createTag:function(){if(this.newTag=this.newTag.trim(),this.newTag!==""){if(this.state.includes(this.newTag)){this.newTag="";return}this.state.push(this.newTag),this.newTag=""}},deleteTag:function(t){this.state=this.state.filter(e=>e!==t)},input:{["x-on:blur"]:"createTag()",["x-model"]:"newTag",["x-on:keydown"](t){["Enter",...n].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),this.createTag())},["x-on:paste"](){this.$nextTick(()=>{if(n.length===0){this.createTag();return}let t=n.map(e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")).join("|");this.newTag.split(new RegExp(t,"g")).forEach(e=>{this.newTag=e,this.createTag()})})}}}}export{i as default};

+ 1 - 0
web/public/js/filament/forms/components/textarea.js

@@ -0,0 +1 @@
+function t({initialHeight:e}){return{init:function(){this.render()},render:function(){this.$el.scrollHeight>0&&(this.$el.style.height=e+"rem",this.$el.style.height=this.$el.scrollHeight+"px")}}}export{t as default};

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/notifications/notifications.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/support/async-alpine.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/support/support.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/tables/components/table.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/widgets/components/chart.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
web/public/js/filament/widgets/components/stats-overview/stat/chart.js


+ 1 - 1
web/routes/web.php

@@ -14,5 +14,5 @@ use Illuminate\Support\Facades\Route;
 */
 
 Route::get('/', function () {
-    return view('welcome');
+    return redirect('/admin');
 });

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio