diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..e69de29
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..780778d
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright 2022 info@3x1.io
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0ebe5fd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,55 @@
+![Screenshot of VILT](https://raw.githubusercontent.com/3x1io/vilt-admin/main/art/stack.jpeg)
+
+# VILT Framework
+
+VILT stack admin panel
+
+## Install
+
+```bash
+composer require queents/vilt
+```
+Now Install VILT
+
+```bash
+php artisan vilt:install
+```
+
+run NPM or YARN to install and build assets
+
+```bash
+npm i & npm run build
+```
+
+OR
+
+```bash
+yarn & yarn build
+```
+
+Generate Username and Password for Dashboard
+
+```bash
+php artisan roles:install
+```
+
+## Support
+
+you can join our discord server to get support [VILT Admin](https://discord.gg/HUNYbgKDdx)
+
+## Docs
+
+look to the new docs of v4.00 on my website [Docs](https://vilt.3x1.io/docs/)
+
+## Changelog
+
+Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
+
+## Credits
+
+- [3x1](https://github.com/3x1io)
+
+## License
+
+The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
+
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..a1ff614
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "queents/vilt",
+ "description": "VILT stack HMVC dashboard and resource generator with ready to use modules",
+ "type": "library",
+ "license": "MIT",
+ "autoload": {
+ "psr-4": {
+ "Queents\\Vilt\\": "src/",
+ "Modules\\": "../../../Modules/"
+ }
+ },
+ "authors": [
+ {
+ "name": "Fady Mondy",
+ "email": "info@3x1.io"
+ }
+ ],
+ "minimum-stability": "beta",
+ "require": {
+ "nwidart/laravel-modules": "^9.0",
+ "spatie/laravel-translatable": "^6.0",
+ "spatie/laravel-translation-loader": "^2.7",
+ "queents/base-module": "^1.0",
+ "queents/roles-module": "^1.0",
+ "queents/generator-module": "^1.0"
+ }
+}
diff --git a/src/Console/InstallVilt.php b/src/Console/InstallVilt.php
new file mode 100644
index 0000000..ab1bc79
--- /dev/null
+++ b/src/Console/InstallVilt.php
@@ -0,0 +1,138 @@
+publish = base_path('vendor/queents/vilt/src/Publish');
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return mixed
+ */
+ public function handle()
+ {
+ /*
+ * Step 1 Copy And Publish Assets
+ */
+ $this->info('Install Jetstream');
+ $this->runArtisan('jetstream:install', [
+ "stack"=>"inertia"
+ ]);
+ $this->info('Migrate Jetstream Tables');
+ $this->runArtisan('migrate');
+ $this->info('Copy tailwind.config.js');
+ $this->handelFile('/tailwind.config.js', base_path('/tailwind.config.js'));
+ $this->info('Copy vite.config.js');
+ $this->handelFile('/vite.config.js', base_path('/vite.config.js'));
+ $this->info('Copy postcss.config.js');
+ $this->handelFile('/postcss.config.js', base_path('/postcss.config.js'));
+ $this->info('Copy package.json');
+ $this->handelFile('/package.json', base_path('/package.json'));
+ $this->info('Copy HandleInertiaRequests.php');
+ $this->handelFile('/app/Http/Middleware/HandleInertiaRequests.php', app_path('/Http/Middleware/HandleInertiaRequests.php'));
+ $this->info('Copy User.php');
+ $this->handelFile('/app/Models/User.php', app_path('/Models/User.php'));
+ $this->info('Copy RouteServiceProvider.php');
+ $this->handelFile('/app/Providers/RouteServiceProvider.php', app_path('/Providers/RouteServiceProvider.php'));
+ $this->info('Copy modules.php');
+ $this->handelFile('/config/modules.php', config_path('/modules.php'));
+ $this->info('Copy app.php');
+ $this->handelFile('/config/app.php', config_path('/app.php'));
+ $this->info('Copy placeholder.webp');
+ $this->handelFile('/public/placeholder.webp', public_path('/placeholder.webp'));
+ $this->info('Copy css');
+ $this->handelFile('/resources/css', resource_path('/css'), 'folder');
+ $this->info('Copy js');
+ $this->handelFile('/resources/js', resource_path('/js'), 'folder');
+ $this->info('Copy views');
+ $this->handelFile('/resources/views', resource_path('/views'), 'folder');
+ $this->info('Copy stubs');
+ $this->handelFile('/stubs/nwidart-stubs', base_path('/stubs/nwidart-stubs'), 'folder');
+ if(!$this->checkFile(base_path('Modules'))){
+ File::makeDirectory(base_path('Modules'));
+ }
+ $this->info('Copy modules_statuses.json');
+ $this->handelFile('/modules_statuses.json', base_path('/modules_statuses.json'));
+ $this->info('Clear cache');
+ $this->runArtisan('optimize:clear');
+ $this->info('Please run npm i & npm run build');
+ }
+
+ public function handelFile(string $from, string $to, string $type = 'file'): void
+ {
+ $checkIfFileEx = $this->checkFile($to);
+ if($checkIfFileEx){
+ $this->deleteFile($to);
+ $this->copyFile($this->publish .$from, $to, $type);
+ }
+ else {
+ $this->copyFile($this->publish .$from, $to, $type);
+ }
+ }
+
+ public function runArtisan(string $command, array $args=[]): string
+ {
+ Artisan::call($command, $args);
+ return Artisan::output();
+ }
+ public function checkFile(string $path): bool
+ {
+ return File::exists($path);
+ }
+
+ public function copyFile(string $from,string $to, string $type ='file'): bool
+ {
+ if($type === 'folder'){
+ $copy = File::copyDirectory($from , $to);
+ }
+ else {
+ $copy = File::copy($from , $to);
+ }
+
+ return $copy;
+ }
+ public function deleteFile(string $path, string $type ='file'): bool
+ {
+ if($type === 'folder'){
+ $delete = File::deleteDirectory($path);
+ }
+ else {
+ $delete = File::delete($path);
+ }
+
+ return $delete;
+ }
+}
diff --git a/src/Publish/app/Http/Middleware/HandleInertiaRequests.php b/src/Publish/app/Http/Middleware/HandleInertiaRequests.php
new file mode 100644
index 0000000..265a001
--- /dev/null
+++ b/src/Publish/app/Http/Middleware/HandleInertiaRequests.php
@@ -0,0 +1,44 @@
+ VILT::get()
+ ]);
+ }
+}
diff --git a/src/Publish/app/Models/User.php b/src/Publish/app/Models/User.php
new file mode 100644
index 0000000..26f7d03
--- /dev/null
+++ b/src/Publish/app/Models/User.php
@@ -0,0 +1,63 @@
+ 'datetime',
+ ];
+
+ /**
+ * The accessors to append to the model's array form.
+ *
+ * @var array
+ */
+ protected $appends = [
+ 'profile_photo_url',
+ ];
+}
diff --git a/src/Publish/app/Providers/RouteServiceProvider.php b/src/Publish/app/Providers/RouteServiceProvider.php
new file mode 100644
index 0000000..c7d37d4
--- /dev/null
+++ b/src/Publish/app/Providers/RouteServiceProvider.php
@@ -0,0 +1,52 @@
+configureRateLimiting();
+
+ $this->routes(function () {
+ Route::middleware('api')
+ ->prefix('api')
+ ->group(base_path('routes/api.php'));
+
+ Route::middleware('web')
+ ->group(base_path('routes/web.php'));
+ });
+ }
+
+ /**
+ * Configure the rate limiters for the application.
+ *
+ * @return void
+ */
+ protected function configureRateLimiting()
+ {
+ RateLimiter::for('api', function (Request $request) {
+ return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
+ });
+ }
+}
diff --git a/src/Publish/config/app.php b/src/Publish/config/app.php
new file mode 100644
index 0000000..3a9605b
--- /dev/null
+++ b/src/Publish/config/app.php
@@ -0,0 +1,218 @@
+ env('APP_NAME', 'Laravel'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Environment
+ |--------------------------------------------------------------------------
+ |
+ | This value determines the "environment" your application is currently
+ | running in. This may determine how you prefer to configure various
+ | services the application utilizes. Set this in your ".env" file.
+ |
+ */
+
+ 'env' => env('APP_ENV', 'production'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Debug Mode
+ |--------------------------------------------------------------------------
+ |
+ | When your application is in debug mode, detailed error messages with
+ | stack traces will be shown on every error that occurs within your
+ | application. If disabled, a simple generic error page is shown.
+ |
+ */
+
+ 'debug' => (bool) env('APP_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application URL
+ |--------------------------------------------------------------------------
+ |
+ | This URL is used by the console to properly generate URLs when using
+ | the Artisan command line tool. You should set this to the root of
+ | your application so that it is used when running Artisan tasks.
+ |
+ */
+
+ 'url' => env('APP_URL', 'http://localhost'),
+
+ 'asset_url' => env('ASSET_URL'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Timezone
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the default timezone for your application, which
+ | will be used by the PHP date and date-time functions. We have gone
+ | ahead and set this to a sensible default for you out of the box.
+ |
+ */
+
+ 'timezone' => 'UTC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Locale Configuration
+ |--------------------------------------------------------------------------
+ |
+ | The application locale determines the default locale that will be used
+ | by the translation service provider. You are free to set this value
+ | to any of the locales which will be supported by the application.
+ |
+ */
+
+ 'locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Fallback Locale
+ |--------------------------------------------------------------------------
+ |
+ | The fallback locale determines the locale to use when the current one
+ | is not available. You may change the value to correspond to any of
+ | the language folders that are provided through your application.
+ |
+ */
+
+ 'fallback_locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Faker Locale
+ |--------------------------------------------------------------------------
+ |
+ | This locale will be used by the Faker PHP library when generating fake
+ | data for your database seeds. For example, this will be used to get
+ | localized telephone numbers, street address information and more.
+ |
+ */
+
+ 'faker_locale' => 'en_US',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Encryption Key
+ |--------------------------------------------------------------------------
+ |
+ | This key is used by the Illuminate encrypter service and should be set
+ | to a random, 32 character string, otherwise these encrypted strings
+ | will not be safe. Please do this before deploying an application!
+ |
+ */
+
+ 'key' => env('APP_KEY'),
+
+ 'cipher' => 'AES-256-CBC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Maintenance Mode Driver
+ |--------------------------------------------------------------------------
+ |
+ | These configuration options determine the driver used to determine and
+ | manage Laravel's "maintenance mode" status. The "cache" driver will
+ | allow maintenance mode to be controlled across multiple machines.
+ |
+ | Supported drivers: "file", "cache"
+ |
+ */
+
+ 'maintenance' => [
+ 'driver' => 'file',
+ // 'store' => 'redis',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Autoloaded Service Providers
+ |--------------------------------------------------------------------------
+ |
+ | The service providers listed here will be automatically loaded on the
+ | request to your application. Feel free to add your own services to
+ | this array to grant expanded functionality to your applications.
+ |
+ */
+
+ 'providers' => [
+
+ /*
+ * Laravel Framework Service Providers...
+ */
+ Illuminate\Auth\AuthServiceProvider::class,
+ Illuminate\Broadcasting\BroadcastServiceProvider::class,
+ Illuminate\Bus\BusServiceProvider::class,
+ Illuminate\Cache\CacheServiceProvider::class,
+ Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
+ Illuminate\Cookie\CookieServiceProvider::class,
+ Illuminate\Database\DatabaseServiceProvider::class,
+ Illuminate\Encryption\EncryptionServiceProvider::class,
+ Illuminate\Filesystem\FilesystemServiceProvider::class,
+ Illuminate\Foundation\Providers\FoundationServiceProvider::class,
+ Illuminate\Hashing\HashServiceProvider::class,
+ Illuminate\Mail\MailServiceProvider::class,
+ Illuminate\Notifications\NotificationServiceProvider::class,
+ Illuminate\Pagination\PaginationServiceProvider::class,
+ Illuminate\Pipeline\PipelineServiceProvider::class,
+ Illuminate\Queue\QueueServiceProvider::class,
+ Illuminate\Redis\RedisServiceProvider::class,
+ Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
+ Illuminate\Session\SessionServiceProvider::class,
+ Spatie\TranslationLoader\TranslationServiceProvider::class,
+ Illuminate\Validation\ValidationServiceProvider::class,
+ Illuminate\View\ViewServiceProvider::class,
+
+ /*
+ * Package Service Providers...
+ */
+
+ /*
+ * Application Service Providers...
+ */
+ App\Providers\AppServiceProvider::class,
+ App\Providers\AuthServiceProvider::class,
+ // App\Providers\BroadcastServiceProvider::class,
+ App\Providers\EventServiceProvider::class,
+ App\Providers\RouteServiceProvider::class,
+ App\Providers\FortifyServiceProvider::class,
+ App\Providers\JetstreamServiceProvider::class,
+ Krlove\EloquentModelGenerator\Provider\GeneratorServiceProvider::class,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Class Aliases
+ |--------------------------------------------------------------------------
+ |
+ | This array of class aliases will be registered when this application
+ | is started. However, feel free to register as many as you wish as
+ | the aliases are "lazy" loaded so they don't hinder performance.
+ |
+ */
+
+ 'aliases' => Facade::defaultAliases()->merge([
+ // 'ExampleClass' => App\Example\ExampleClass::class,
+ ])->toArray(),
+
+];
diff --git a/src/Publish/config/modules.php b/src/Publish/config/modules.php
new file mode 100644
index 0000000..8bb348e
--- /dev/null
+++ b/src/Publish/config/modules.php
@@ -0,0 +1,275 @@
+ 'Modules',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Module Stubs
+ |--------------------------------------------------------------------------
+ |
+ | Default module stubs.
+ |
+ */
+
+ 'stubs' => [
+ 'enabled' => false,
+ 'path' => base_path('stubs/nwidart-stubs'),
+ 'files' => [
+ 'routes/web' => 'Routes/web.php',
+ 'routes/api' => 'Routes/api.php',
+ 'views/index' => 'Resources/views/index.blade.php',
+ 'views/master' => 'Resources/views/layouts/master.blade.php',
+ 'scaffold/config' => 'Config/config.php',
+ 'composer' => 'composer.json',
+ 'assets/js/app' => 'Resources/assets/js/app.js',
+ 'assets/sass/app' => 'Resources/assets/sass/app.scss',
+ 'webpack' => 'webpack.mix.js',
+ 'package' => 'package.json'
+ ],
+ 'replacements' => [
+ 'routes/web' => ['LOWER_NAME', 'STUDLY_NAME'],
+ 'routes/api' => ['LOWER_NAME'],
+ 'webpack' => ['LOWER_NAME'],
+ 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE', 'PROVIDER_NAMESPACE'],
+ 'views/index' => ['LOWER_NAME'],
+ 'views/master' => ['LOWER_NAME', 'STUDLY_NAME'],
+ 'scaffold/config' => ['STUDLY_NAME'],
+ 'composer' => [
+ 'LOWER_NAME',
+ 'STUDLY_NAME',
+ 'VENDOR',
+ 'AUTHOR_NAME',
+ 'AUTHOR_EMAIL',
+ 'MODULE_NAMESPACE',
+ 'PROVIDER_NAMESPACE',
+ ],
+ ],
+ 'gitkeep' => true,
+ ],
+ 'paths' => [
+ /*
+ |--------------------------------------------------------------------------
+ | Modules path
+ |--------------------------------------------------------------------------
+ |
+ | This path used for save the generated module. This path also will be added
+ | automatically to list of scanned folders.
+ |
+ */
+
+ 'modules' => base_path('Modules'),
+ /*
+ |--------------------------------------------------------------------------
+ | Modules assets path
+ |--------------------------------------------------------------------------
+ |
+ | Here you may update the modules assets path.
+ |
+ */
+
+ 'assets' => public_path('modules'),
+ /*
+ |--------------------------------------------------------------------------
+ | The migrations path
+ |--------------------------------------------------------------------------
+ |
+ | Where you run 'module:publish-migration' command, where do you publish the
+ | the migration files?
+ |
+ */
+
+ 'migration' => base_path('database/migrations'),
+ /*
+ |--------------------------------------------------------------------------
+ | Generator path
+ |--------------------------------------------------------------------------
+ | Customise the paths where the folders will be generated.
+ | Set the generate key to false to not generate that folder
+ */
+ 'generator' => [
+ 'config' => ['path' => 'Config', 'generate' => true],
+ 'command' => ['path' => 'Console', 'generate' => true],
+ 'migration' => ['path' => 'Database/Migrations', 'generate' => true],
+ 'seeder' => ['path' => 'Database/Seeders', 'generate' => true],
+ 'factory' => ['path' => 'Database/factories', 'generate' => true],
+ 'model' => ['path' => 'Entities', 'generate' => true],
+ 'routes' => ['path' => 'Routes', 'generate' => true],
+ 'controller' => ['path' => 'Http/Controllers', 'generate' => true],
+ 'filter' => ['path' => 'Http/Middleware', 'generate' => true],
+ 'request' => ['path' => 'Http/Requests', 'generate' => true],
+ 'provider' => ['path' => 'Providers', 'generate' => true],
+ 'assets' => ['path' => 'Resources/assets', 'generate' => true],
+ 'lang' => ['path' => 'Resources/lang', 'generate' => true],
+ 'views' => ['path' => 'Resources/views', 'generate' => true],
+ 'test' => ['path' => 'Tests/Unit', 'generate' => true],
+ 'test-feature' => ['path' => 'Tests/Feature', 'generate' => true],
+ 'repository' => ['path' => 'Repositories', 'generate' => false],
+ 'event' => ['path' => 'Events', 'generate' => false],
+ 'listener' => ['path' => 'Listeners', 'generate' => false],
+ 'policies' => ['path' => 'Policies', 'generate' => false],
+ 'rules' => ['path' => 'Rules', 'generate' => false],
+ 'jobs' => ['path' => 'Jobs', 'generate' => false],
+ 'emails' => ['path' => 'Emails', 'generate' => false],
+ 'notifications' => ['path' => 'Notifications', 'generate' => false],
+ 'resource' => ['path' => 'Transformers', 'generate' => false],
+ 'component-view' => ['path' => 'Resources/views/components', 'generate' => false],
+ 'component-class' => ['path' => 'View/Components', 'generate' => false],
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Package commands
+ |--------------------------------------------------------------------------
+ |
+ | Here you can define which commands will be visible and used in your
+ | application. If for example you don't use some of the commands provided
+ | you can simply comment them out.
+ |
+ */
+ 'commands' => [
+ Commands\CommandMakeCommand::class,
+ Commands\ComponentClassMakeCommand::class,
+ Commands\ComponentViewMakeCommand::class,
+ Commands\ControllerMakeCommand::class,
+ Commands\DisableCommand::class,
+ Commands\DumpCommand::class,
+ Commands\EnableCommand::class,
+ Commands\EventMakeCommand::class,
+ Commands\JobMakeCommand::class,
+ Commands\ListenerMakeCommand::class,
+ Commands\MailMakeCommand::class,
+ Commands\MiddlewareMakeCommand::class,
+ Commands\NotificationMakeCommand::class,
+ Commands\ProviderMakeCommand::class,
+ Commands\RouteProviderMakeCommand::class,
+ Commands\InstallCommand::class,
+ Commands\ListCommand::class,
+ Commands\ModuleDeleteCommand::class,
+ Commands\ModuleMakeCommand::class,
+ Commands\FactoryMakeCommand::class,
+ Commands\PolicyMakeCommand::class,
+ Commands\RequestMakeCommand::class,
+ Commands\RuleMakeCommand::class,
+ Commands\MigrateCommand::class,
+ Commands\MigrateRefreshCommand::class,
+ Commands\MigrateResetCommand::class,
+ Commands\MigrateRollbackCommand::class,
+ Commands\MigrateStatusCommand::class,
+ Commands\MigrationMakeCommand::class,
+ Commands\ModelMakeCommand::class,
+ Commands\PublishCommand::class,
+ Commands\PublishConfigurationCommand::class,
+ Commands\PublishMigrationCommand::class,
+ Commands\PublishTranslationCommand::class,
+ Commands\SeedCommand::class,
+ Commands\SeedMakeCommand::class,
+ Commands\SetupCommand::class,
+ Commands\UnUseCommand::class,
+ Commands\UpdateCommand::class,
+ Commands\UseCommand::class,
+ Commands\ResourceMakeCommand::class,
+ Commands\TestMakeCommand::class,
+ Commands\LaravelModulesV6Migrator::class,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Scan Path
+ |--------------------------------------------------------------------------
+ |
+ | Here you define which folder will be scanned. By default will scan vendor
+ | directory. This is useful if you host the package in packagist website.
+ |
+ */
+
+ 'scan' => [
+ 'enabled' => true,
+ 'paths' => [
+ base_path('vendor/*/*'),
+ ],
+ ],
+ /*
+ |--------------------------------------------------------------------------
+ | Composer File Template
+ |--------------------------------------------------------------------------
+ |
+ | Here is the config for composer.json file, generated by this package
+ |
+ */
+
+ 'composer' => [
+ 'vendor' => 'queents',
+ 'author' => [
+ 'name' => 'Fady Mondy',
+ 'email' => 'info@3x1.io',
+ ],
+ 'composer-output' => false,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Caching
+ |--------------------------------------------------------------------------
+ |
+ | Here is the config for setting up caching feature.
+ |
+ */
+ 'cache' => [
+ 'enabled' => false,
+ 'key' => 'laravel-modules',
+ 'lifetime' => 60,
+ ],
+ /*
+ |--------------------------------------------------------------------------
+ | Choose what laravel-modules will register as custom namespaces.
+ | Setting one to false will require you to register that part
+ | in your own Service Provider class.
+ |--------------------------------------------------------------------------
+ */
+ 'register' => [
+ 'translations' => true,
+ /**
+ * load files on boot or register method
+ *
+ * Note: boot not compatible with asgardcms
+ *
+ * @example boot|register
+ */
+ 'files' => 'register',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Activators
+ |--------------------------------------------------------------------------
+ |
+ | You can define new types of activators here, file, database etc. The only
+ | required parameter is 'class'.
+ | The file activator will store the activation status in storage/installed_modules
+ */
+ 'activators' => [
+ 'file' => [
+ 'class' => FileActivator::class,
+ 'statuses-file' => base_path('modules_statuses.json'),
+ 'cache-key' => 'activator.installed',
+ 'cache-lifetime' => 604800,
+ ],
+ ],
+
+ 'activator' => 'file',
+];
diff --git a/src/Publish/modules_statuses.json b/src/Publish/modules_statuses.json
new file mode 100644
index 0000000..0c8f51e
--- /dev/null
+++ b/src/Publish/modules_statuses.json
@@ -0,0 +1,5 @@
+{
+ "Base": true,
+ "Roles": true,
+ "Generator": true
+}
diff --git a/src/Publish/package.json b/src/Publish/package.json
new file mode 100644
index 0000000..80c2df1
--- /dev/null
+++ b/src/Publish/package.json
@@ -0,0 +1,51 @@
+{
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build"
+ },
+ "devDependencies": {
+ "@inertiajs/inertia": "^0.11.0",
+ "@inertiajs/inertia-vue3": "^0.6.0",
+ "@inertiajs/progress": "^0.2.7",
+ "@mdi/js": "^7.0.96",
+ "@tailwindcss/forms": "^0.5.2",
+ "@vitejs/plugin-vue": "^3.0.0",
+ "autoprefixer": "^10.4.2",
+ "axios": "^0.27.2",
+ "chart.js": "^3.9.1",
+ "laravel-vite-plugin": "^0.5.0",
+ "lodash": "^4.17.19",
+ "numeral": "^2.0.6",
+ "pinia": "^2.0.20",
+ "postcss": "^8.4.6",
+ "prettier": "2.7.1",
+ "tailwindcss": "^3.1.0",
+ "vite": "^3.0.0",
+ "vue": "^3.2.31"
+ },
+ "dependencies": {
+ "@meforma/vue-toaster": "^1.3.0",
+ "@suadelabs/vue3-multiselect": "^1.0.2",
+ "@tailwindcss/line-clamp": "^0.4.0",
+ "@vueform/toggle": "^2.1.1",
+ "boxicons": "^2.1.2",
+ "codemirror-editor-vue3": "^2.1.7",
+ "filepond": "^4.30.4",
+ "filepond-plugin-file-validate-type": "^1.2.8",
+ "filepond-plugin-image-preview": "^4.6.11",
+ "moment": "^2.29.4",
+ "tailwindcss-rtl": "^0.9.0",
+ "vue-draggable-next": "^2.1.1",
+ "vue-easy-lightbox": "^1.8.0",
+ "vue-filepond": "^7.0.3",
+ "vue-flatpickr-component": "^9.0.6",
+ "vue-lazyload": "^3.0.0-rc.2",
+ "vue-swatches": "^2.1.1",
+ "vue3-cookies": "^1.0.6",
+ "vue3-editor": "^0.1.1",
+ "vue3-swatches": "^1.0.10",
+ "vue3-tabs-component": "^1.1.0",
+ "vue3-tel-input": "^1.0.4"
+ }
+}
diff --git a/src/Publish/postcss.config.js b/src/Publish/postcss.config.js
new file mode 100644
index 0000000..1d7e6f0
--- /dev/null
+++ b/src/Publish/postcss.config.js
@@ -0,0 +1,8 @@
+/* eslint-env node */
+module.exports = {
+ plugins: [
+ require("postcss-import"),
+ require("tailwindcss"),
+ require("autoprefixer"),
+ ],
+};
diff --git a/src/Publish/public/placeholder.webp b/src/Publish/public/placeholder.webp
new file mode 100644
index 0000000..043f180
Binary files /dev/null and b/src/Publish/public/placeholder.webp differ
diff --git a/src/Publish/resources/css/_checkbox-radio-switch.css b/src/Publish/resources/css/_checkbox-radio-switch.css
new file mode 100644
index 0000000..a7f567b
--- /dev/null
+++ b/src/Publish/resources/css/_checkbox-radio-switch.css
@@ -0,0 +1,59 @@
+@layer components {
+ .checkbox, .radio, .switch {
+ @apply inline-flex items-center cursor-pointer relative;
+ }
+
+ .checkbox input[type=checkbox], .radio input[type=radio], .switch input[type=checkbox] {
+ @apply absolute left-0 opacity-0 -z-1;
+ }
+
+ .checkbox input[type=checkbox]+.check, .radio input[type=radio]+.check, .switch input[type=checkbox]+.check {
+ @apply border-gray-700 border transition-colors duration-200 dark:bg-slate-800;
+ }
+
+ .checkbox input[type=checkbox]:focus+.check, .radio input[type=radio]:focus+.check, .switch input[type=checkbox]:focus+.check {
+ @apply ring ring-blue-700;
+ }
+
+ .checkbox input[type=checkbox]+.check, .radio input[type=radio]+.check {
+ @apply block w-5 h-5;
+ }
+
+ .checkbox input[type=checkbox]+.check {
+ @apply rounded;
+ }
+
+ .switch input[type=checkbox]+.check {
+ @apply flex items-center shrink-0 w-12 h-6 p-0.5 bg-gray-200;
+ }
+
+ .radio input[type=radio]+.check, .switch input[type=checkbox]+.check, .switch input[type=checkbox]+.check:before {
+ @apply rounded-full;
+ }
+
+ .checkbox input[type=checkbox]:checked+.check, .radio input[type=radio]:checked+.check {
+ @apply bg-no-repeat bg-center border-4;
+ }
+
+ .checkbox input[type=checkbox]:checked+.check {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3Cpath style='fill:%23fff' d='M 0.04038059,0.6267767 0.14644661,0.52071068 0.42928932,0.80355339 0.3232233,0.90961941 z M 0.21715729,0.80355339 0.85355339,0.16715729 0.95961941,0.2732233 0.3232233,0.90961941 z'%3E%3C/path%3E%3C/svg%3E");
+ }
+
+ .radio input[type=radio]:checked+.check {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z' /%3E%3C/svg%3E");
+ }
+
+ .switch input[type=checkbox]:checked+.check, .checkbox input[type=checkbox]:checked+.check, .radio input[type=radio]:checked+.check {
+ @apply bg-blue-600 border-blue-600;
+ }
+
+ .switch input[type=checkbox]+.check:before {
+ content: '';
+ @apply block w-5 h-5 bg-white border border-gray-700;
+ }
+
+ .switch input[type=checkbox]:checked+.check:before {
+ transform: translate3d(110%, 0 ,0);
+ @apply border-blue-600;
+ }
+}
\ No newline at end of file
diff --git a/src/Publish/resources/css/_progress.css b/src/Publish/resources/css/_progress.css
new file mode 100644
index 0000000..65d6796
--- /dev/null
+++ b/src/Publish/resources/css/_progress.css
@@ -0,0 +1,21 @@
+@layer base {
+ progress {
+ @apply h-3 rounded-full overflow-hidden;
+ }
+
+ progress::-webkit-progress-bar {
+ @apply bg-blue-200;
+ }
+
+ progress::-webkit-progress-value {
+ @apply bg-blue-500;
+ }
+
+ progress::-moz-progress-bar {
+ @apply bg-blue-500;
+ }
+
+ progress::-ms-fill {
+ @apply bg-blue-500 border-0;
+ }
+}
diff --git a/src/Publish/resources/css/_scrollbars.css b/src/Publish/resources/css/_scrollbars.css
new file mode 100644
index 0000000..a181b84
--- /dev/null
+++ b/src/Publish/resources/css/_scrollbars.css
@@ -0,0 +1,41 @@
+@layer base {
+ html {
+ scrollbar-width: thin;
+ scrollbar-color: rgb(156, 163, 175) rgb(249, 250, 251);
+ }
+
+ body::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ }
+
+ body::-webkit-scrollbar-track {
+ @apply bg-gray-50;
+ }
+
+ body::-webkit-scrollbar-thumb {
+ @apply bg-gray-400 rounded;
+ }
+
+ body::-webkit-scrollbar-thumb:hover {
+ @apply bg-gray-500;
+ }
+}
+
+@layer utilities {
+ .dark-scrollbars-compat {
+ scrollbar-color: rgb(71, 85, 105) rgb(30, 41, 59);
+ }
+
+ .dark-scrollbars::-webkit-scrollbar-track {
+ @apply bg-slate-800;
+ }
+
+ .dark-scrollbars::-webkit-scrollbar-thumb {
+ @apply bg-slate-600;
+ }
+
+ .dark-scrollbars::-webkit-scrollbar-thumb:hover {
+ @apply bg-slate-500;
+ }
+}
diff --git a/src/Publish/resources/css/_table.css b/src/Publish/resources/css/_table.css
new file mode 100644
index 0000000..962b9af
--- /dev/null
+++ b/src/Publish/resources/css/_table.css
@@ -0,0 +1,48 @@
+@layer base {
+ table {
+ @apply w-full;
+ }
+
+ thead {
+ @apply hidden lg:table-header-group;
+ }
+
+ tr {
+ @apply max-w-full block relative border-b-4 border-gray-100
+ lg:table-row lg:border-b-0 dark:border-slate-800;
+ }
+
+ tr:last-child {
+ @apply border-b-0;
+ }
+
+ td:not(:first-child) {
+ @apply lg:border-l lg:border-t-0 lg:border-r-0 lg:border-b-0 lg:border-gray-100 lg:dark:border-slate-700;
+ }
+
+ th {
+ @apply lg:text-left lg:p-3;
+ }
+
+ td {
+ @apply flex justify-between text-right py-3 px-4 align-top border-b border-gray-100
+ lg:table-cell lg:text-left lg:p-3 lg:align-middle lg:border-b-0 dark:border-slate-800;
+ }
+
+ td:last-child {
+ @apply border-b-0;
+ }
+
+ tbody tr, tbody tr:nth-child(odd) {
+ @apply lg:hover:bg-gray-100 lg:dark:hover:bg-slate-700/70;
+ }
+
+ tbody tr:nth-child(odd) {
+ @apply lg:bg-gray-100/50 lg:dark:bg-slate-800/50;
+ }
+
+ td:before {
+ content: attr(data-label);
+ @apply font-semibold pr-3 text-left lg:hidden;
+ }
+}
diff --git a/src/Publish/resources/css/app.css b/src/Publish/resources/css/app.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/src/Publish/resources/css/app.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/Publish/resources/css/main.css b/src/Publish/resources/css/main.css
new file mode 100644
index 0000000..8f6d211
--- /dev/null
+++ b/src/Publish/resources/css/main.css
@@ -0,0 +1,8 @@
+@import "tailwind/_base.css";
+@import "tailwind/_components.css";
+@import "tailwind/_utilities.css";
+
+@import "_checkbox-radio-switch.css";
+@import "_progress.css";
+@import "_scrollbars.css";
+@import "_table.css";
diff --git a/src/Publish/resources/css/tailwind/_base.css b/src/Publish/resources/css/tailwind/_base.css
new file mode 100644
index 0000000..2f02db5
--- /dev/null
+++ b/src/Publish/resources/css/tailwind/_base.css
@@ -0,0 +1 @@
+@tailwind base;
diff --git a/src/Publish/resources/css/tailwind/_components.css b/src/Publish/resources/css/tailwind/_components.css
new file mode 100644
index 0000000..020aaba
--- /dev/null
+++ b/src/Publish/resources/css/tailwind/_components.css
@@ -0,0 +1 @@
+@tailwind components;
diff --git a/src/Publish/resources/css/tailwind/_utilities.css b/src/Publish/resources/css/tailwind/_utilities.css
new file mode 100644
index 0000000..65dd5f6
--- /dev/null
+++ b/src/Publish/resources/css/tailwind/_utilities.css
@@ -0,0 +1 @@
+@tailwind utilities;
diff --git a/src/Publish/resources/js/Components/ActionMessage.vue b/src/Publish/resources/js/Components/ActionMessage.vue
new file mode 100644
index 0000000..5974148
--- /dev/null
+++ b/src/Publish/resources/js/Components/ActionMessage.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/ActionSection.vue b/src/Publish/resources/js/Components/ActionSection.vue
new file mode 100644
index 0000000..5b6fc48
--- /dev/null
+++ b/src/Publish/resources/js/Components/ActionSection.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/ApplicationLogo.vue b/src/Publish/resources/js/Components/ApplicationLogo.vue
new file mode 100644
index 0000000..762a358
--- /dev/null
+++ b/src/Publish/resources/js/Components/ApplicationLogo.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/ApplicationMark.vue b/src/Publish/resources/js/Components/ApplicationMark.vue
new file mode 100644
index 0000000..e150674
--- /dev/null
+++ b/src/Publish/resources/js/Components/ApplicationMark.vue
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/AsideMenu.vue b/src/Publish/resources/js/Components/AsideMenu.vue
new file mode 100644
index 0000000..1431d2e
--- /dev/null
+++ b/src/Publish/resources/js/Components/AsideMenu.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/AsideMenuItem.vue b/src/Publish/resources/js/Components/AsideMenuItem.vue
new file mode 100644
index 0000000..96fb5eb
--- /dev/null
+++ b/src/Publish/resources/js/Components/AsideMenuItem.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ {{ trans(item.label) }}
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/AsideMenuLayer.vue b/src/Publish/resources/js/Components/AsideMenuLayer.vue
new file mode 100644
index 0000000..1755559
--- /dev/null
+++ b/src/Publish/resources/js/Components/AsideMenuLayer.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/AsideMenuList.vue b/src/Publish/resources/js/Components/AsideMenuList.vue
new file mode 100644
index 0000000..8516749
--- /dev/null
+++ b/src/Publish/resources/js/Components/AsideMenuList.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/AuthenticationCard.vue b/src/Publish/resources/js/Components/AuthenticationCard.vue
new file mode 100644
index 0000000..59f3713
--- /dev/null
+++ b/src/Publish/resources/js/Components/AuthenticationCard.vue
@@ -0,0 +1,11 @@
+
+
+
diff --git a/src/Publish/resources/js/Components/AuthenticationCardLogo.vue b/src/Publish/resources/js/Components/AuthenticationCardLogo.vue
new file mode 100644
index 0000000..9604420
--- /dev/null
+++ b/src/Publish/resources/js/Components/AuthenticationCardLogo.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Banner.vue b/src/Publish/resources/js/Components/Banner.vue
new file mode 100644
index 0000000..6af1cf1
--- /dev/null
+++ b/src/Publish/resources/js/Components/Banner.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Bulk.vue b/src/Publish/resources/js/Components/Base/Bulk.vue
new file mode 100644
index 0000000..2b743f6
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Bulk.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Components/Area.vue b/src/Publish/resources/js/Components/Base/Components/Area.vue
new file mode 100644
index 0000000..83a46a8
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Components/Area.vue
@@ -0,0 +1,45 @@
+
+
+
{{ label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Components/MSelect.vue b/src/Publish/resources/js/Components/Base/Components/MSelect.vue
new file mode 100644
index 0000000..65cde16
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Components/MSelect.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Components/Media.vue b/src/Publish/resources/js/Components/Base/Components/Media.vue
new file mode 100644
index 0000000..09474da
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Components/Media.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
{{
+ label
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select A New Photo
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Components/Schema.vue b/src/Publish/resources/js/Components/Base/Components/Schema.vue
new file mode 100644
index 0000000..1c4df0d
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Components/Schema.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Components/Switch.vue b/src/Publish/resources/js/Components/Base/Components/Switch.vue
new file mode 100644
index 0000000..d2244ac
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Components/Switch.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Components/Text.vue b/src/Publish/resources/js/Components/Base/Components/Text.vue
new file mode 100644
index 0000000..fadc447
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Components/Text.vue
@@ -0,0 +1,46 @@
+
+
+
{{ label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Filters.vue b/src/Publish/resources/js/Components/Base/Filters.vue
new file mode 100644
index 0000000..b994bc3
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Filters.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+ {{ trans('global.filter') }}
+
+
+
+
+
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Header.vue b/src/Publish/resources/js/Components/Base/Header.vue
new file mode 100644
index 0000000..63e5fbb
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Header.vue
@@ -0,0 +1,75 @@
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ {{ trans("global.home") }}
+
+
+
+ /
+
+
+ {{
+ title
+ }}
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Mixin.vue b/src/Publish/resources/js/Components/Base/Mixin.vue
new file mode 100644
index 0000000..8e84ce3
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Mixin.vue
@@ -0,0 +1,262 @@
+
+
diff --git a/src/Publish/resources/js/Components/Base/Modals/Bulk.vue b/src/Publish/resources/js/Components/Base/Modals/Bulk.vue
new file mode 100644
index 0000000..ca6ed13
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Modals/Bulk.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ {{ title }}
+
+
+ {{ trans('global.bulk.message') }}
+
+
+
+
+
+
+ {{ trans('global.run') }}
+
+
+ {{ trans('global.close') }}
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Modals/Create.vue b/src/Publish/resources/js/Components/Base/Modals/Create.vue
new file mode 100644
index 0000000..e3bd0e3
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Modals/Create.vue
@@ -0,0 +1,494 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trans("global.next") }}
+
+
+ {{ trans("global.save") }}
+
+
+ {{ trans("global.save") }}
+
+
+ {{ trans("global.update") }}
+
+
+ {{ trans("global.close") }}
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Modals/Delete.vue b/src/Publish/resources/js/Components/Base/Modals/Delete.vue
new file mode 100644
index 0000000..7af5d4a
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Modals/Delete.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
{{ trans('global.delete') }}
+
+ {{ trans('global.delete.message') }}
+
+
+
+
+
+
+ Delete
+
+
+ Close
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Modals/View.vue b/src/Publish/resources/js/Components/Base/Modals/View.vue
new file mode 100644
index 0000000..b3736ca
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Modals/View.vue
@@ -0,0 +1,121 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trans("global.close") }}
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Pagination.vue b/src/Publish/resources/js/Components/Base/Pagination.vue
new file mode 100644
index 0000000..9c50dcf
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Pagination.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Rows/ViltForm.vue b/src/Publish/resources/js/Components/Base/Rows/ViltForm.vue
new file mode 100644
index 0000000..5df3ca6
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Rows/ViltForm.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Base/Table.vue b/src/Publish/resources/js/Components/Base/Table.vue
new file mode 100644
index 0000000..58f4769
--- /dev/null
+++ b/src/Publish/resources/js/Components/Base/Table.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+
+
+
+
+
+ {{ trans("global.empty") }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/BaseButton.vue b/src/Publish/resources/js/Components/BaseButton.vue
new file mode 100644
index 0000000..b18fc6a
--- /dev/null
+++ b/src/Publish/resources/js/Components/BaseButton.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+ {{ label }}
+
+
diff --git a/src/Publish/resources/js/Components/BaseButtons.vue b/src/Publish/resources/js/Components/BaseButtons.vue
new file mode 100644
index 0000000..f9fef19
--- /dev/null
+++ b/src/Publish/resources/js/Components/BaseButtons.vue
@@ -0,0 +1,60 @@
+
diff --git a/src/Publish/resources/js/Components/BaseDivider.vue b/src/Publish/resources/js/Components/BaseDivider.vue
new file mode 100644
index 0000000..fd013a0
--- /dev/null
+++ b/src/Publish/resources/js/Components/BaseDivider.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/BaseIcon.vue b/src/Publish/resources/js/Components/BaseIcon.vue
new file mode 100644
index 0000000..b1967a2
--- /dev/null
+++ b/src/Publish/resources/js/Components/BaseIcon.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/BaseLevel.vue b/src/Publish/resources/js/Components/BaseLevel.vue
new file mode 100644
index 0000000..c275db1
--- /dev/null
+++ b/src/Publish/resources/js/Components/BaseLevel.vue
@@ -0,0 +1,40 @@
+
diff --git a/src/Publish/resources/js/Components/Button.vue b/src/Publish/resources/js/Components/Button.vue
new file mode 100644
index 0000000..1599c23
--- /dev/null
+++ b/src/Publish/resources/js/Components/Button.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBox.vue b/src/Publish/resources/js/Components/CardBox.vue
new file mode 100644
index 0000000..00497fc
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBox.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxClient.vue b/src/Publish/resources/js/Components/CardBoxClient.vue
new file mode 100644
index 0000000..65c9af9
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxClient.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+ {{ name }}
+
+
+ {{ date }} @ {{ login }}
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxComponentBody.vue b/src/Publish/resources/js/Components/CardBoxComponentBody.vue
new file mode 100644
index 0000000..cb4cb94
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxComponentBody.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxComponentEmpty.vue b/src/Publish/resources/js/Components/CardBoxComponentEmpty.vue
new file mode 100644
index 0000000..f4c07a8
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxComponentEmpty.vue
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxComponentFooter.vue b/src/Publish/resources/js/Components/CardBoxComponentFooter.vue
new file mode 100644
index 0000000..71dd3ee
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxComponentFooter.vue
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxComponentHeader.vue b/src/Publish/resources/js/Components/CardBoxComponentHeader.vue
new file mode 100644
index 0000000..320d476
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxComponentHeader.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxComponentTitle.vue b/src/Publish/resources/js/Components/CardBoxComponentTitle.vue
new file mode 100644
index 0000000..c5bce14
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxComponentTitle.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxModal.vue b/src/Publish/resources/js/Components/CardBoxModal.vue
new file mode 100644
index 0000000..569df79
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxModal.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxTransaction.vue b/src/Publish/resources/js/Components/CardBoxTransaction.vue
new file mode 100644
index 0000000..9141537
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxTransaction.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
${{ amount }}
+
+ {{ date }} via {{ business }}
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/CardBoxWidget.vue b/src/Publish/resources/js/Components/CardBoxWidget.vue
new file mode 100644
index 0000000..d620355
--- /dev/null
+++ b/src/Publish/resources/js/Components/CardBoxWidget.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Charts/LineChart.vue b/src/Publish/resources/js/Components/Charts/LineChart.vue
new file mode 100644
index 0000000..b7c24b5
--- /dev/null
+++ b/src/Publish/resources/js/Components/Charts/LineChart.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Charts/chart.config.js b/src/Publish/resources/js/Components/Charts/chart.config.js
new file mode 100644
index 0000000..cfbb33c
--- /dev/null
+++ b/src/Publish/resources/js/Components/Charts/chart.config.js
@@ -0,0 +1,54 @@
+export const chartColors = {
+ default: {
+ primary: "#00D1B2",
+ info: "#209CEE",
+ danger: "#FF3860",
+ },
+};
+
+const randomChartData = (n) => {
+ const data = [];
+
+ for (let i = 0; i < n; i++) {
+ data.push(Math.round(Math.random() * 200));
+ }
+
+ return data;
+};
+
+const datasetObject = (color, points) => {
+ return {
+ fill: false,
+ borderColor: chartColors.default[color],
+ borderWidth: 2,
+ borderDash: [],
+ borderDashOffset: 0.0,
+ pointBackgroundColor: chartColors.default[color],
+ pointBorderColor: "rgba(255,255,255,0)",
+ pointHoverBackgroundColor: chartColors.default[color],
+ pointBorderWidth: 20,
+ pointHoverRadius: 4,
+ pointHoverBorderWidth: 15,
+ pointRadius: 4,
+ data: randomChartData(points),
+ tension: 0.5,
+ cubicInterpolationMode: "default",
+ };
+};
+
+export const sampleChartData = (points = 9) => {
+ const labels = [];
+
+ for (let i = 1; i <= points; i++) {
+ labels.push(`0${i}`);
+ }
+
+ return {
+ labels,
+ datasets: [
+ datasetObject("primary", points),
+ datasetObject("info", points),
+ datasetObject("danger", points),
+ ],
+ };
+};
diff --git a/src/Publish/resources/js/Components/Checkbox.vue b/src/Publish/resources/js/Components/Checkbox.vue
new file mode 100644
index 0000000..1fbc8c7
--- /dev/null
+++ b/src/Publish/resources/js/Components/Checkbox.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/ConfirmationModal.vue b/src/Publish/resources/js/Components/ConfirmationModal.vue
new file mode 100644
index 0000000..330a557
--- /dev/null
+++ b/src/Publish/resources/js/Components/ConfirmationModal.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/ConfirmsPassword.vue b/src/Publish/resources/js/Components/ConfirmsPassword.vue
new file mode 100644
index 0000000..3387aa0
--- /dev/null
+++ b/src/Publish/resources/js/Components/ConfirmsPassword.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+
+
+ {{ button }}
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/DangerButton.vue b/src/Publish/resources/js/Components/DangerButton.vue
new file mode 100644
index 0000000..276f3b3
--- /dev/null
+++ b/src/Publish/resources/js/Components/DangerButton.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/DialogModal.vue b/src/Publish/resources/js/Components/DialogModal.vue
new file mode 100644
index 0000000..80ebb3d
--- /dev/null
+++ b/src/Publish/resources/js/Components/DialogModal.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Dropdown.vue b/src/Publish/resources/js/Components/Dropdown.vue
new file mode 100644
index 0000000..e8a9bb3
--- /dev/null
+++ b/src/Publish/resources/js/Components/Dropdown.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/DropdownLink.vue b/src/Publish/resources/js/Components/DropdownLink.vue
new file mode 100644
index 0000000..84c9cb7
--- /dev/null
+++ b/src/Publish/resources/js/Components/DropdownLink.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FooterBar.vue b/src/Publish/resources/js/Components/FooterBar.vue
new file mode 100644
index 0000000..c5a5ddc
--- /dev/null
+++ b/src/Publish/resources/js/Components/FooterBar.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ ©{{ year }},
+ QTS .
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FormCheckRadio.vue b/src/Publish/resources/js/Components/FormCheckRadio.vue
new file mode 100644
index 0000000..0db683f
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormCheckRadio.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+ {{ label }}
+
+
diff --git a/src/Publish/resources/js/Components/FormCheckRadioGroup.vue b/src/Publish/resources/js/Components/FormCheckRadioGroup.vue
new file mode 100644
index 0000000..d03c04c
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormCheckRadioGroup.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FormControl.vue b/src/Publish/resources/js/Components/FormControl.vue
new file mode 100644
index 0000000..6e16c8f
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormControl.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+ {{ option.label ?? option }}
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FormControlIcon.vue b/src/Publish/resources/js/Components/FormControlIcon.vue
new file mode 100644
index 0000000..41ea7b9
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormControlIcon.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FormField.vue b/src/Publish/resources/js/Components/FormField.vue
new file mode 100644
index 0000000..a8636b5
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormField.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
{{
+ label
+ }}
+
+
+
+
+ {{ help }}
+
+
+
diff --git a/src/Publish/resources/js/Components/FormFilePicker.vue b/src/Publish/resources/js/Components/FormFilePicker.vue
new file mode 100644
index 0000000..774a893
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormFilePicker.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+ {{ file.name }}
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FormSection.vue b/src/Publish/resources/js/Components/FormSection.vue
new file mode 100644
index 0000000..543097f
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormSection.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/FormValidationErrors.vue b/src/Publish/resources/js/Components/FormValidationErrors.vue
new file mode 100644
index 0000000..c509f09
--- /dev/null
+++ b/src/Publish/resources/js/Components/FormValidationErrors.vue
@@ -0,0 +1,17 @@
+
+
+
+
+ Whoops! Something went wrong.
+ {{ error }}
+
+
diff --git a/src/Publish/resources/js/Components/IconRounded.vue b/src/Publish/resources/js/Components/IconRounded.vue
new file mode 100644
index 0000000..5a080f1
--- /dev/null
+++ b/src/Publish/resources/js/Components/IconRounded.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Input.vue b/src/Publish/resources/js/Components/Input.vue
new file mode 100644
index 0000000..84a0f9c
--- /dev/null
+++ b/src/Publish/resources/js/Components/Input.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/InputError.vue b/src/Publish/resources/js/Components/InputError.vue
new file mode 100644
index 0000000..be06535
--- /dev/null
+++ b/src/Publish/resources/js/Components/InputError.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/JustboilLogo.vue b/src/Publish/resources/js/Components/JustboilLogo.vue
new file mode 100644
index 0000000..c33b87f
--- /dev/null
+++ b/src/Publish/resources/js/Components/JustboilLogo.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Label.vue b/src/Publish/resources/js/Components/Label.vue
new file mode 100644
index 0000000..9967f17
--- /dev/null
+++ b/src/Publish/resources/js/Components/Label.vue
@@ -0,0 +1,12 @@
+
+
+
+
+ {{ value }}
+
+
+
diff --git a/src/Publish/resources/js/Components/Modal.vue b/src/Publish/resources/js/Components/Modal.vue
new file mode 100644
index 0000000..6d80c56
--- /dev/null
+++ b/src/Publish/resources/js/Components/Modal.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NavBar.vue b/src/Publish/resources/js/Components/NavBar.vue
new file mode 100644
index 0000000..e8edac9
--- /dev/null
+++ b/src/Publish/resources/js/Components/NavBar.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ menuItem.dark.label }}
+
+
+
+ {{ menuItem.translation.label }}
+
+
+
+ {{ menuItem.logout.label }}
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NavBarItem.vue b/src/Publish/resources/js/Components/NavBarItem.vue
new file mode 100644
index 0000000..638f91e
--- /dev/null
+++ b/src/Publish/resources/js/Components/NavBarItem.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+ {{ itemLabel }}
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NavBarItemPlain.vue b/src/Publish/resources/js/Components/NavBarItemPlain.vue
new file mode 100644
index 0000000..ac2c231
--- /dev/null
+++ b/src/Publish/resources/js/Components/NavBarItemPlain.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NavBarMenuList.vue b/src/Publish/resources/js/Components/NavBarMenuList.vue
new file mode 100644
index 0000000..19922cb
--- /dev/null
+++ b/src/Publish/resources/js/Components/NavBarMenuList.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NavLink.vue b/src/Publish/resources/js/Components/NavLink.vue
new file mode 100644
index 0000000..f69f39f
--- /dev/null
+++ b/src/Publish/resources/js/Components/NavLink.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NotificationBar.vue b/src/Publish/resources/js/Components/NotificationBar.vue
new file mode 100644
index 0000000..5e41aba
--- /dev/null
+++ b/src/Publish/resources/js/Components/NotificationBar.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NotificationBarInCard.vue b/src/Publish/resources/js/Components/NotificationBarInCard.vue
new file mode 100644
index 0000000..2c75259
--- /dev/null
+++ b/src/Publish/resources/js/Components/NotificationBarInCard.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/NumberDynamic.vue b/src/Publish/resources/js/Components/NumberDynamic.vue
new file mode 100644
index 0000000..c92f71f
--- /dev/null
+++ b/src/Publish/resources/js/Components/NumberDynamic.vue
@@ -0,0 +1,63 @@
+
+
+
+ {{ prefix }}{{ newValueFormatted }}{{ suffix }}
+
diff --git a/src/Publish/resources/js/Components/OverlayLayer.vue b/src/Publish/resources/js/Components/OverlayLayer.vue
new file mode 100644
index 0000000..13821e9
--- /dev/null
+++ b/src/Publish/resources/js/Components/OverlayLayer.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/PillTag.vue b/src/Publish/resources/js/Components/PillTag.vue
new file mode 100644
index 0000000..eb1e5d5
--- /dev/null
+++ b/src/Publish/resources/js/Components/PillTag.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+ {{ label }}
+
+
diff --git a/src/Publish/resources/js/Components/PillTagTrend.vue b/src/Publish/resources/js/Components/PillTagTrend.vue
new file mode 100644
index 0000000..667b739
--- /dev/null
+++ b/src/Publish/resources/js/Components/PillTagTrend.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/ResponsiveNavLink.vue b/src/Publish/resources/js/Components/ResponsiveNavLink.vue
new file mode 100644
index 0000000..1dd2e19
--- /dev/null
+++ b/src/Publish/resources/js/Components/ResponsiveNavLink.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/SecondaryButton.vue b/src/Publish/resources/js/Components/SecondaryButton.vue
new file mode 100644
index 0000000..371f097
--- /dev/null
+++ b/src/Publish/resources/js/Components/SecondaryButton.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionBanner.vue b/src/Publish/resources/js/Components/SectionBanner.vue
new file mode 100644
index 0000000..1f08840
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionBanner.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionBannerStarOnGitHub.vue b/src/Publish/resources/js/Components/SectionBannerStarOnGitHub.vue
new file mode 100644
index 0000000..4a1475f
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionBannerStarOnGitHub.vue
@@ -0,0 +1,21 @@
+
+
+
+
+ Like the project? Please star on GitHub ;-)
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionBorder.vue b/src/Publish/resources/js/Components/SectionBorder.vue
new file mode 100644
index 0000000..707f566
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionBorder.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionFullScreen.vue b/src/Publish/resources/js/Components/SectionFullScreen.vue
new file mode 100644
index 0000000..a7d7b4d
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionFullScreen.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionMain.vue b/src/Publish/resources/js/Components/SectionMain.vue
new file mode 100644
index 0000000..db3d26b
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionMain.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionTitle.vue b/src/Publish/resources/js/Components/SectionTitle.vue
new file mode 100644
index 0000000..273116e
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionTitle.vue
@@ -0,0 +1,17 @@
+
+
+
diff --git a/src/Publish/resources/js/Components/SectionTitleLineWithButton.vue b/src/Publish/resources/js/Components/SectionTitleLineWithButton.vue
new file mode 100644
index 0000000..f862ba1
--- /dev/null
+++ b/src/Publish/resources/js/Components/SectionTitleLineWithButton.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/TableCheckboxCell.vue b/src/Publish/resources/js/Components/TableCheckboxCell.vue
new file mode 100644
index 0000000..620f0e4
--- /dev/null
+++ b/src/Publish/resources/js/Components/TableCheckboxCell.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/TableSampleClients.vue b/src/Publish/resources/js/Components/TableSampleClients.vue
new file mode 100644
index 0000000..1ef56f8
--- /dev/null
+++ b/src/Publish/resources/js/Components/TableSampleClients.vue
@@ -0,0 +1,196 @@
+
+
+
+
+ Lorem ipsum dolor sit amet adipiscing elit
+ This is sample modal
+
+
+
+ Lorem ipsum dolor sit amet adipiscing elit
+ This is sample modal
+
+
+
+
+ {{ checkedRow.name }}
+
+
+
+
+
+
+
+
+ Name
+ Company
+ City
+ Progress
+ Created
+
+
+
+
+
+
+
+
+
+
+ {{ client.name }}
+
+
+ {{ client.company }}
+
+
+ {{ client.city }}
+
+
+
+ {{ client.progress }}
+
+
+
+ {{ client.created }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page {{ currentPageHuman }} of {{ numPages }}
+
+
+
diff --git a/src/Publish/resources/js/Components/UserAvatar.vue b/src/Publish/resources/js/Components/UserAvatar.vue
new file mode 100644
index 0000000..b7206d7
--- /dev/null
+++ b/src/Publish/resources/js/Components/UserAvatar.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/UserAvatarCurrentUser.vue b/src/Publish/resources/js/Components/UserAvatarCurrentUser.vue
new file mode 100644
index 0000000..03bf838
--- /dev/null
+++ b/src/Publish/resources/js/Components/UserAvatarCurrentUser.vue
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/UserCard.vue b/src/Publish/resources/js/Components/UserCard.vue
new file mode 100644
index 0000000..61c6403
--- /dev/null
+++ b/src/Publish/resources/js/Components/UserCard.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+ Howdy, {{ userName }} !
+
+
Last login 12 mins ago from 127.0.0.1
+
+
+
+
+
diff --git a/src/Publish/resources/js/Components/Welcome.vue b/src/Publish/resources/js/Components/Welcome.vue
new file mode 100644
index 0000000..dcdd286
--- /dev/null
+++ b/src/Publish/resources/js/Components/Welcome.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+ Welcome to your Jetstream application!
+
+
+
+ Laravel Jetstream provides a beautiful, robust starting point for your next Laravel application. Laravel is designed
+ to help you build your application using a development environment that is simple, powerful, and enjoyable. We believe
+ you should love expressing your creativity through programming, so we have spent time carefully crafting the Laravel
+ ecosystem to be a breath of fresh air. We hope you love it.
+
+
+
+
+
+
+
+
+
+ Laravel has wonderful documentation covering every aspect of the framework. Whether you're new to the framework or have previous experience, we recommend reading all of the documentation from beginning to end.
+
+
+
+
+
Explore the documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
+
+
+
+
+
Start watching Laracasts
+
+
+
+
+
+
+
+
+
+
+
+
+ Laravel Jetstream is built with Tailwind, an amazing utility first CSS framework that doesn't get in your way. You'll be amazed how easily you can build and maintain fresh, modern designs with this wonderful framework at your fingertips.
+
+
+
+
+
+
+
+
+
+ Authentication and registration views are included with Laravel Jetstream, as well as support for user email verification and resetting forgotten passwords. So, you're free to get started what matters most: building your application.
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ActionMessage.vue b/src/Publish/resources/js/Jetstream/ActionMessage.vue
new file mode 100644
index 0000000..effc749
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ActionMessage.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ActionSection.vue b/src/Publish/resources/js/Jetstream/ActionSection.vue
new file mode 100644
index 0000000..ea8c67f
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ActionSection.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ApplicationLogo.vue b/src/Publish/resources/js/Jetstream/ApplicationLogo.vue
new file mode 100644
index 0000000..cea073e
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ApplicationLogo.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ApplicationMark.vue b/src/Publish/resources/js/Jetstream/ApplicationMark.vue
new file mode 100644
index 0000000..8f12718
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ApplicationMark.vue
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/AuthenticationCard.vue b/src/Publish/resources/js/Jetstream/AuthenticationCard.vue
new file mode 100644
index 0000000..59f3713
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/AuthenticationCard.vue
@@ -0,0 +1,11 @@
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/AuthenticationCardLogo.vue b/src/Publish/resources/js/Jetstream/AuthenticationCardLogo.vue
new file mode 100644
index 0000000..5f7f1e4
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/AuthenticationCardLogo.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Banner.vue b/src/Publish/resources/js/Jetstream/Banner.vue
new file mode 100644
index 0000000..4e82ce2
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Banner.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Button.vue b/src/Publish/resources/js/Jetstream/Button.vue
new file mode 100644
index 0000000..f12cdd5
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Button.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Checkbox.vue b/src/Publish/resources/js/Jetstream/Checkbox.vue
new file mode 100644
index 0000000..d651c61
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Checkbox.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ConfirmationModal.vue b/src/Publish/resources/js/Jetstream/ConfirmationModal.vue
new file mode 100644
index 0000000..df982c7
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ConfirmationModal.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ConfirmsPassword.vue b/src/Publish/resources/js/Jetstream/ConfirmsPassword.vue
new file mode 100644
index 0000000..f646be8
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ConfirmsPassword.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+
+
+ {{ button }}
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/DangerButton.vue b/src/Publish/resources/js/Jetstream/DangerButton.vue
new file mode 100644
index 0000000..e3e8d71
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/DangerButton.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/DialogModal.vue b/src/Publish/resources/js/Jetstream/DialogModal.vue
new file mode 100644
index 0000000..071d0af
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/DialogModal.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Dropdown.vue b/src/Publish/resources/js/Jetstream/Dropdown.vue
new file mode 100644
index 0000000..0ee4220
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Dropdown.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/DropdownLink.vue b/src/Publish/resources/js/Jetstream/DropdownLink.vue
new file mode 100644
index 0000000..ec04a30
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/DropdownLink.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/FormSection.vue b/src/Publish/resources/js/Jetstream/FormSection.vue
new file mode 100644
index 0000000..90bb1b7
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/FormSection.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Input.vue b/src/Publish/resources/js/Jetstream/Input.vue
new file mode 100644
index 0000000..6f13c62
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Input.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/InputError.vue b/src/Publish/resources/js/Jetstream/InputError.vue
new file mode 100644
index 0000000..6941f67
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/InputError.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Label.vue b/src/Publish/resources/js/Jetstream/Label.vue
new file mode 100644
index 0000000..60aa6e6
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Label.vue
@@ -0,0 +1,14 @@
+
+
+ {{ value }}
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Modal.vue b/src/Publish/resources/js/Jetstream/Modal.vue
new file mode 100644
index 0000000..528b78e
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Modal.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/NavLink.vue b/src/Publish/resources/js/Jetstream/NavLink.vue
new file mode 100644
index 0000000..3351309
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/NavLink.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ResponsiveNavLink.vue b/src/Publish/resources/js/Jetstream/ResponsiveNavLink.vue
new file mode 100644
index 0000000..83100ee
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ResponsiveNavLink.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/SecondaryButton.vue b/src/Publish/resources/js/Jetstream/SecondaryButton.vue
new file mode 100644
index 0000000..b509857
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/SecondaryButton.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/SectionBorder.vue b/src/Publish/resources/js/Jetstream/SectionBorder.vue
new file mode 100644
index 0000000..2352bb5
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/SectionBorder.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/SectionTitle.vue b/src/Publish/resources/js/Jetstream/SectionTitle.vue
new file mode 100644
index 0000000..fac64fe
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/SectionTitle.vue
@@ -0,0 +1,17 @@
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/ValidationErrors.vue b/src/Publish/resources/js/Jetstream/ValidationErrors.vue
new file mode 100644
index 0000000..c6d14bb
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/ValidationErrors.vue
@@ -0,0 +1,25 @@
+
+
+
Whoops! Something went wrong.
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Jetstream/Welcome.vue b/src/Publish/resources/js/Jetstream/Welcome.vue
new file mode 100644
index 0000000..5bc549f
--- /dev/null
+++ b/src/Publish/resources/js/Jetstream/Welcome.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+ Welcome to your Jetstream application!
+
+
+
+ Laravel Jetstream provides a beautiful, robust starting point for your next Laravel application. Laravel is designed
+ to help you build your application using a development environment that is simple, powerful, and enjoyable. We believe
+ you should love expressing your creativity through programming, so we have spent time carefully crafting the Laravel
+ ecosystem to be a breath of fresh air. We hope you love it.
+
+
+
+
+
+
+
+
+
+ Laravel has wonderful documentation covering every aspect of the framework. Whether you're new to the framework or have previous experience, we recommend reading all of the documentation from beginning to end.
+
+
+
+
+
Explore the documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
+
+
+
+
+
Start watching Laracasts
+
+
+
+
+
+
+
+
+
+
+
+
+ Laravel Jetstream is built with Tailwind, an amazing utility first CSS framework that doesn't get in your way. You'll be amazed how easily you can build and maintain fresh, modern designs with this wonderful framework at your fingertips.
+
+
+
+
+
+
+
+
+
+ Authentication and registration views are included with Laravel Jetstream, as well as support for user email verification and resetting forgotten passwords. So, you're free to get started what matters most: building your application.
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Layouts/AppLayout.vue b/src/Publish/resources/js/Layouts/AppLayout.vue
new file mode 100644
index 0000000..1a31d0b
--- /dev/null
+++ b/src/Publish/resources/js/Layouts/AppLayout.vue
@@ -0,0 +1,311 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dashboard
+
+
+
+
+
+
+
+
+
+
+
+ {{ $page.props.user.current_team.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Manage Team
+
+
+
+
+ Team Settings
+
+
+
+ Create New Team
+
+
+
+
+
+
+ Switch Teams
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $page.props.user.name }}
+
+
+
+
+
+
+
+
+
+
+
+ Manage Account
+
+
+
+ Profile
+
+
+
+ API Tokens
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dashboard
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $page.props.user.name }}
+
+
+ {{ $page.props.user.email }}
+
+
+
+
+
+
+ Profile
+
+
+
+ API Tokens
+
+
+
+
+
+
+
+
+
+
+ Manage Team
+
+
+
+
+ Team Settings
+
+
+
+ Create New Team
+
+
+
+
+
+
+ Switch Teams
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Layouts/LayoutAuthenticated.vue b/src/Publish/resources/js/Layouts/LayoutAuthenticated.vue
new file mode 100644
index 0000000..48970d9
--- /dev/null
+++ b/src/Publish/resources/js/Layouts/LayoutAuthenticated.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Github
+ Docs
+
+
+
+
diff --git a/src/Publish/resources/js/Layouts/LayoutGuest.vue b/src/Publish/resources/js/Layouts/LayoutGuest.vue
new file mode 100644
index 0000000..e04c46e
--- /dev/null
+++ b/src/Publish/resources/js/Layouts/LayoutGuest.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/src/Publish/resources/js/Layouts/ResourceTableLayout.vue b/src/Publish/resources/js/Layouts/ResourceTableLayout.vue
new file mode 100644
index 0000000..2b33d4e
--- /dev/null
+++ b/src/Publish/resources/js/Layouts/ResourceTableLayout.vue
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ attrs.lang.bulk }}
+
+
+
+
+
+
+
+
+
+
+
+
+ Github
+ Docs
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/API/Index.vue b/src/Publish/resources/js/Pages/API/Index.vue
new file mode 100644
index 0000000..df4cb5b
--- /dev/null
+++ b/src/Publish/resources/js/Pages/API/Index.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+ API Tokens
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/API/Partials/ApiTokenManager.vue b/src/Publish/resources/js/Pages/API/Partials/ApiTokenManager.vue
new file mode 100644
index 0000000..ed9a4fc
--- /dev/null
+++ b/src/Publish/resources/js/Pages/API/Partials/ApiTokenManager.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+ Create API Token
+
+
+
+ API tokens allow third-party services to authenticate with our application on your behalf.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ permission }}
+
+
+
+
+
+
+
+
+ Created.
+
+
+
+ Create
+
+
+
+
+
+
+
+
+
+
+
+ Manage API Tokens
+
+
+
+ You may delete any of your existing tokens if they are no longer needed.
+
+
+
+
+
+
+
+ {{ token.name }}
+
+
+
+
+ Last used {{ token.last_used_ago }}
+
+
+
+ Permissions
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+ API Token
+
+
+
+
+ Please copy your new API token. For your security, it won't be shown again.
+
+
+
+ {{ $page.props.jetstream.flash.token }}
+
+
+
+
+
+ Close
+
+
+
+
+
+
+
+ API Token Permissions
+
+
+
+
+
+
+
+ {{ permission }}
+
+
+
+
+
+
+
+ Cancel
+
+
+
+ Save
+
+
+
+
+
+
+
+ Delete API Token
+
+
+
+ Are you sure you would like to delete this API token?
+
+
+
+
+ Cancel
+
+
+
+ Delete
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Auth/ConfirmPassword.vue b/src/Publish/resources/js/Pages/Auth/ConfirmPassword.vue
new file mode 100644
index 0000000..014a374
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/ConfirmPassword.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+ This is a secure area of the application. Please confirm your password before continuing.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Auth/ForgotPassword.vue b/src/Publish/resources/js/Pages/Auth/ForgotPassword.vue
new file mode 100644
index 0000000..21d952b
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/ForgotPassword.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ status }}
+
+
+
+
+ Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.
+
+
+
+
+
+
+
+
+
+
+
+
+ Back to login
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Auth/Login.vue b/src/Publish/resources/js/Pages/Auth/Login.vue
new file mode 100644
index 0000000..caf99ec
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/Login.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ status }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Register
+
+
+
+
+
+
+Footer
diff --git a/src/Publish/resources/js/Pages/Auth/Register.vue b/src/Publish/resources/js/Pages/Auth/Register.vue
new file mode 100644
index 0000000..5a27d4d
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/Register.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Auth/ResetPassword.vue b/src/Publish/resources/js/Pages/Auth/ResetPassword.vue
new file mode 100644
index 0000000..6af73fb
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/ResetPassword.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Auth/TwoFactorChallenge.vue b/src/Publish/resources/js/Pages/Auth/TwoFactorChallenge.vue
new file mode 100644
index 0000000..0571c5c
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/TwoFactorChallenge.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+ Please confirm access to your account by entering the authentication code provided by your authenticator application.
+
+
+ Please confirm access to your account by entering one of your emergency recovery codes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Use a recovery code
+
+
+ Use an authentication code
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Auth/VerifyEmail.vue b/src/Publish/resources/js/Pages/Auth/VerifyEmail.vue
new file mode 100644
index 0000000..af0cb3a
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Auth/VerifyEmail.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+ A new verification link has been sent to the email address you provided during registration.
+
+
+
+
+ Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.
+
+
+
+
+
+
+
+
+ Logout
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Dashboard.vue b/src/Publish/resources/js/Pages/Dashboard.vue
new file mode 100644
index 0000000..66c8d4e
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Dashboard.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ Dashboard
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/HomeView.vue b/src/Publish/resources/js/Pages/HomeView.vue
new file mode 100644
index 0000000..cb86319
--- /dev/null
+++ b/src/Publish/resources/js/Pages/HomeView.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Responsive table. Collapses on mobile
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/PrivacyPolicy.vue b/src/Publish/resources/js/Pages/PrivacyPolicy.vue
new file mode 100644
index 0000000..66d9b05
--- /dev/null
+++ b/src/Publish/resources/js/Pages/PrivacyPolicy.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Profile/Partials/DeleteUserForm.vue b/src/Publish/resources/js/Pages/Profile/Partials/DeleteUserForm.vue
new file mode 100644
index 0000000..b416583
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Profile/Partials/DeleteUserForm.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+ Delete Account
+
+
+
+ Permanently delete your account.
+
+
+
+
+ Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.
+
+
+
+
+ Delete Account
+
+
+
+
+
+
+ Delete Account
+
+
+
+ Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+
+
+ Delete Account
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Profile/Partials/LogoutOtherBrowserSessionsForm.vue b/src/Publish/resources/js/Pages/Profile/Partials/LogoutOtherBrowserSessionsForm.vue
new file mode 100644
index 0000000..fdb1561
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Profile/Partials/LogoutOtherBrowserSessionsForm.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+ Browser Sessions
+
+
+
+ Manage and log out your active sessions on other browsers and devices.
+
+
+
+
+ If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.
+
+
+
+
+
+
+
+
+
+ {{ session.agent.platform ? session.agent.platform : 'Unknown' }} - {{ session.agent.browser ? session.agent.browser : 'Unknown' }}
+
+
+
+
+ {{ session.ip_address }},
+
+ This device
+ Last active {{ session.last_active }}
+
+
+
+
+
+
+
+
+ Log Out Other Browser Sessions
+
+
+
+ Done.
+
+
+
+
+
+
+ Log Out Other Browser Sessions
+
+
+
+ Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+
+
+ Log Out Other Browser Sessions
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Profile/Partials/TwoFactorAuthenticationForm.vue b/src/Publish/resources/js/Pages/Profile/Partials/TwoFactorAuthenticationForm.vue
new file mode 100644
index 0000000..685df41
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Profile/Partials/TwoFactorAuthenticationForm.vue
@@ -0,0 +1,253 @@
+
+
+
+
+
+ Two Factor Authentication
+
+
+
+ Add additional security to your account using two factor authentication.
+
+
+
+
+ You have enabled two factor authentication.
+
+
+
+ Finish enabling two factor authentication.
+
+
+
+ You have not enabled two factor authentication.
+
+
+
+
+ When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.
+
+
+
+
+
+
+
+ To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.
+
+
+
+ Two factor authentication is now enabled. Scan the following QR code using your phone's authenticator application or enter the setup key.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.
+
+
+
+
+
+
+
+
+
+
+
+ Enable
+
+
+
+
+
+
+
+ Confirm
+
+
+
+
+
+ Regenerate Recovery Codes
+
+
+
+
+
+ Show Recovery Codes
+
+
+
+
+
+ Cancel
+
+
+
+
+
+ Disable
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue b/src/Publish/resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue
new file mode 100644
index 0000000..be28312
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+ Update Password
+
+
+
+ Ensure your account is using a long, random password to stay secure.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Saved.
+
+
+
+ Save
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue b/src/Publish/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue
new file mode 100644
index 0000000..f2ebf8c
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+ Profile Information
+
+
+
+ Update your account's profile information and email address.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select A New Photo
+
+
+
+ Remove Photo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Your email address is unverified.
+
+
+ Click here to re-send the verification email.
+
+
+
+
+ A new verification link has been sent to your email address.
+
+
+
+
+
+
+
+ Saved.
+
+
+
+ Save
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Profile/Show.vue b/src/Publish/resources/js/Pages/Profile/Show.vue
new file mode 100644
index 0000000..f9d30a3
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Profile/Show.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Resource.vue b/src/Publish/resources/js/Pages/Resource.vue
new file mode 100644
index 0000000..5a283c0
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Resource.vue
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ attrs.lang.bulk }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ action.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/TermsOfService.vue b/src/Publish/resources/js/Pages/TermsOfService.vue
new file mode 100644
index 0000000..d7963a7
--- /dev/null
+++ b/src/Publish/resources/js/Pages/TermsOfService.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/js/Pages/Welcome.vue b/src/Publish/resources/js/Pages/Welcome.vue
new file mode 100644
index 0000000..6b41757
--- /dev/null
+++ b/src/Publish/resources/js/Pages/Welcome.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+ Dashboard
+
+
+ Log in
+
+ Register
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end.
+
+
+
+
+
+
+
+
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
+
+
+
+
+
+
+
+
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.
+
+
+
+
+
+
+
+
+ Vibrant Ecosystem
+
+
+
+
+
+ Laravel's robust library of first-party tools and libraries, such as
Forge ,
Vapor ,
Nova , and
Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like
Cashier ,
Dusk ,
Echo ,
Horizon ,
Sanctum ,
Telescope , and more.
+
+
+
+
+
+
+
+
+
+
+ Laravel v{{ laravelVersion }} (PHP v{{ phpVersion }})
+
+
+
+
+
diff --git a/src/Publish/resources/js/Stores/layout.js b/src/Publish/resources/js/Stores/layout.js
new file mode 100644
index 0000000..32dbb03
--- /dev/null
+++ b/src/Publish/resources/js/Stores/layout.js
@@ -0,0 +1,14 @@
+import { defineStore } from "pinia";
+
+export const useLayoutStore = defineStore("layout", {
+ state: () => ({
+ isAsideMobileExpanded: false,
+ isAsideLgActive: false,
+ }),
+
+ actions: {
+ asideMobileToggle() {
+ this.isAsideMobileExpanded = !this.isAsideMobileExpanded;
+ },
+ },
+});
diff --git a/src/Publish/resources/js/Stores/main.js b/src/Publish/resources/js/Stores/main.js
new file mode 100644
index 0000000..7fd3b2f
--- /dev/null
+++ b/src/Publish/resources/js/Stores/main.js
@@ -0,0 +1,44 @@
+import { defineStore } from "pinia";
+import axios from "axios";
+
+export const useMainStore = defineStore("main", {
+ state: () => ({
+ /* User */
+ userName: null,
+ userEmail: null,
+ userAvatar: null,
+
+ /* Field focus with ctrl+k (to register only once) */
+ isFieldFocusRegistered: false,
+
+ /* Sample data (commonly used) */
+ clients: [],
+ history: [],
+ }),
+ actions: {
+ setUser(payload) {
+ if (payload.name) {
+ this.userName = payload.name;
+ }
+ if (payload.email) {
+ this.userEmail = payload.email;
+ }
+ if (payload.avatar) {
+ this.userAvatar = payload.avatar;
+ }
+ },
+
+ fetch(sampleDataKey) {
+ axios
+ .get(`data-sources/${sampleDataKey}.json`)
+ .then((r) => {
+ if (r.data && r.data.data) {
+ this[sampleDataKey] = r.data.data;
+ }
+ })
+ .catch((error) => {
+ alert(error.message);
+ });
+ },
+ },
+});
diff --git a/src/Publish/resources/js/Stores/style.js b/src/Publish/resources/js/Stores/style.js
new file mode 100644
index 0000000..1c4d175
--- /dev/null
+++ b/src/Publish/resources/js/Stores/style.js
@@ -0,0 +1,56 @@
+import { defineStore } from "pinia";
+import * as styles from "@/styles";
+import { darkModeKey, styleKey } from "@/config";
+
+export const useStyleStore = defineStore("style", {
+ state: () => ({
+ /* Styles */
+ asideStyle: "",
+ asideBrandStyle: "",
+ asideMenuItemStyle: "",
+ asideMenuItemActiveStyle: "",
+ asideMenuDropdownStyle: "",
+ navBarItemLabelStyle: "",
+ navBarItemLabelHoverStyle: "",
+ navBarItemLabelActiveColorStyle: "",
+ overlayStyle: "",
+
+ /* Dark mode */
+ darkMode: false,
+ }),
+ actions: {
+ setStyle(payload) {
+ if (!styles[payload]) {
+ return;
+ }
+
+ if (typeof localStorage !== "undefined") {
+ localStorage.setItem(styleKey, payload);
+ }
+
+ const style = styles[payload];
+
+ for (const key in style) {
+ this[`${key}Style`] = style[key];
+ }
+ },
+
+ setDarkMode(payload = null) {
+ this.darkMode = payload !== null ? payload : !this.darkMode;
+
+ if (typeof localStorage !== "undefined") {
+ localStorage.setItem(darkModeKey, this.darkMode ? "1" : "0");
+ }
+
+ if (typeof document !== "undefined") {
+ document.body.classList[this.darkMode ? "add" : "remove"](
+ "dark-scrollbars"
+ );
+
+ document.documentElement.classList[this.darkMode ? "add" : "remove"](
+ "dark-scrollbars-compat"
+ );
+ }
+ },
+ },
+});
diff --git a/src/Publish/resources/js/app.js b/src/Publish/resources/js/app.js
new file mode 100644
index 0000000..9f1fe89
--- /dev/null
+++ b/src/Publish/resources/js/app.js
@@ -0,0 +1,85 @@
+import { createPinia } from 'pinia';
+import './bootstrap';
+import { useStyleStore } from '@/Stores/style.js';
+
+import { darkModeKey, styleKey } from '@/config.js';
+
+import { createApp, h } from 'vue';
+import { createInertiaApp, Link } from '@inertiajs/inertia-vue3';
+import { InertiaProgress } from '@inertiajs/progress';
+import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
+import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';
+import Toaster from '@meforma/vue-toaster';
+import 'boxicons/css/boxicons.min.css';
+import VueCookies from 'vue3-cookies';
+
+import VueLazyload from 'vue-lazyload';
+const errorimage =
+ 'https://www.naos-marketing.com/wp-content/themes/themify-ultra/themify/img/image-placeholder.webp';
+const loadimage = 'https://media3.giphy.com/media/3oEjI6SIIHBdRxXI40/200.gif';
+
+const appName =
+ window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';
+
+const pinia = createPinia();
+
+createInertiaApp({
+ title: (title) => `${title} - ${appName}`,
+ resolve: async (name) => {
+ let page = '';
+ if (name.includes('@')) {
+ const matched = /@(.*)::/.exec(name);
+ const module = matched[1];
+ const pageName = name.replace(matched[0], '');
+ page = resolvePageComponent(
+ `../../Modules/${module}/Resources/views/${pageName}.vue`,
+ import.meta.glob('../../Modules/**/**/**/**/*.vue')
+ );
+ } else {
+ page = resolvePageComponent(
+ `./Pages/${name}.vue`,
+ import.meta.glob('./Pages/**/*.vue')
+ );
+ }
+ page.then((module) => {
+ module.default.layout = module.default.layout;
+ });
+ return page;
+ },
+ setup({ el, app, props, plugin }) {
+ return createApp({ render: () => h(app, props) })
+ .use(plugin)
+ .use(Toaster)
+ .use(VueCookies, {
+ expireTimes: '30d',
+ path: '/',
+ domain: '',
+ secure: true,
+ sameSite: 'None',
+ })
+ .use(VueLazyload, {
+ error: errorimage,
+ loading: loadimage,
+ })
+ .use(pinia)
+ .use(ZiggyVue, Ziggy)
+ .component('Link', Link)
+ .mount(el);
+ },
+});
+
+InertiaProgress.init({ color: '#4B5563' });
+
+const styleStore = useStyleStore(pinia);
+
+/* App style */
+styleStore.setStyle(localStorage[styleKey] ?? 'basic');
+
+/* Dark mode */
+if (
+ (!localStorage[darkModeKey] &&
+ window.matchMedia('(prefers-color-scheme: dark)').matches) ||
+ localStorage[darkModeKey] === '1'
+) {
+ styleStore.setDarkMode(true);
+}
diff --git a/src/Publish/resources/js/bootstrap.js b/src/Publish/resources/js/bootstrap.js
new file mode 100644
index 0000000..d21a8c0
--- /dev/null
+++ b/src/Publish/resources/js/bootstrap.js
@@ -0,0 +1,34 @@
+import _ from 'lodash';
+window._ = _;
+
+/**
+ * We'll load the axios HTTP library which allows us to easily issue requests
+ * to our Laravel back-end. This library automatically handles sending the
+ * CSRF token as a header based on the value of the "XSRF" token cookie.
+ */
+
+import axios from 'axios';
+window.axios = axios;
+
+window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
+
+/**
+ * Echo exposes an expressive API for subscribing to channels and listening
+ * for events that are broadcast by Laravel. Echo and event broadcasting
+ * allows your team to easily build robust real-time web applications.
+ */
+
+// import Echo from 'laravel-echo';
+
+// import Pusher from 'pusher-js';
+// window.Pusher = Pusher;
+
+// window.Echo = new Echo({
+// broadcaster: 'pusher',
+// key: import.meta.env.VITE_PUSHER_APP_KEY,
+// wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
+// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
+// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
+// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
+// enabledTransports: ['ws', 'wss'],
+// });
diff --git a/src/Publish/resources/js/colors.js b/src/Publish/resources/js/colors.js
new file mode 100644
index 0000000..d78fb66
--- /dev/null
+++ b/src/Publish/resources/js/colors.js
@@ -0,0 +1,138 @@
+export const gradientBgBase = "bg-gradient-to-tr";
+export const gradientBgPurplePink = `${gradientBgBase} from-purple-400 via-pink-500 to-red-500`;
+export const gradientBgDark = `${gradientBgBase} from-slate-700 via-slate-900 to-slate-800`;
+export const gradientBgPinkRed = `${gradientBgBase} from-pink-400 via-red-500 to-yellow-500`;
+
+export const colorsBgLight = {
+ white: "bg-white text-black",
+ light: "bg-white text-black dark:bg-slate-900/70 dark:text-white",
+ contrast: "bg-gray-800 text-white dark:bg-white dark:text-black",
+ success: "bg-emerald-500 border-emerald-500 text-white",
+ danger: "bg-red-500 border-red-500 text-white",
+ warning: "bg-yellow-500 border-yellow-500 text-white",
+ info: "bg-blue-500 border-blue-500 text-white",
+};
+
+export const colorsText = {
+ white: "text-black dark:text-slate-100",
+ light: "text-gray-700 dark:text-slate-400",
+ contrast: "dark:text-white",
+ success: "text-emerald-500",
+ danger: "text-red-500",
+ warning: "text-yellow-500",
+ info: "text-blue-500",
+};
+
+export const colorsOutline = {
+ white: [colorsText.white, "border-gray-100"],
+ light: [colorsText.light, "border-gray-100"],
+ contrast: [colorsText.contrast, "border-gray-900 dark:border-slate-100"],
+ success: [colorsText.success, "border-emerald-500"],
+ danger: [colorsText.danger, "border-red-500"],
+ warning: [colorsText.warning, "border-yellow-500"],
+ info: [colorsText.info, "border-blue-500"],
+};
+
+export const getButtonColor = (
+ color,
+ isOutlined,
+ hasHover,
+ isActive = false
+) => {
+ const colors = {
+ ring: {
+ white: "ring-gray-200 dark:ring-gray-500",
+ whiteDark: "ring-gray-200 dark:ring-gray-500",
+ lightDark: "ring-gray-200 dark:ring-gray-500",
+ contrast: "ring-gray-300 dark:ring-gray-400",
+ success: "ring-emerald-300 dark:ring-emerald-700",
+ danger: "ring-red-300 dark:ring-red-700",
+ warning: "ring-yellow-300 dark:ring-yellow-700",
+ info: "ring-blue-300 dark:ring-blue-700",
+ },
+ active: {
+ white: "bg-gray-100",
+ whiteDark: "bg-gray-100 dark:bg-slate-800",
+ lightDark: "bg-gray-200 dark:bg-slate-700",
+ contrast: "bg-gray-700 dark:bg-slate-100",
+ success: "bg-emerald-700 dark:bg-emerald-600",
+ danger: "bg-red-700 dark:bg-red-600",
+ warning: "bg-yellow-700 dark:bg-yellow-600",
+ info: "bg-blue-700 dark:bg-blue-600",
+ },
+ bg: {
+ white: "bg-white text-black",
+ whiteDark: "bg-white text-black dark:bg-slate-900 dark:text-white",
+ lightDark: "bg-gray-100 text-black dark:bg-slate-800 dark:text-white",
+ contrast: "bg-gray-800 text-white dark:bg-white dark:text-black",
+ success: "bg-emerald-600 dark:bg-emerald-500 text-white",
+ danger: "bg-red-600 dark:bg-red-500 text-white",
+ warning: "bg-yellow-600 dark:bg-yellow-500 text-white",
+ info: "bg-blue-600 dark:bg-blue-500 text-white",
+ },
+ bgHover: {
+ white: "hover:bg-gray-100",
+ whiteDark: "hover:bg-gray-100 hover:dark:bg-slate-800",
+ lightDark: "hover:bg-gray-200 hover:dark:bg-slate-700",
+ contrast: "hover:bg-gray-700 hover:dark:bg-slate-100",
+ success:
+ "hover:bg-emerald-700 hover:border-emerald-700 hover:dark:bg-emerald-600 hover:dark:border-emerald-600",
+ danger:
+ "hover:bg-red-700 hover:border-red-700 hover:dark:bg-red-600 hover:dark:border-red-600",
+ warning:
+ "hover:bg-yellow-700 hover:border-yellow-700 hover:dark:bg-yellow-600 hover:dark:border-yellow-600",
+ info: "hover:bg-blue-700 hover:border-blue-700 hover:dark:bg-blue-600 hover:dark:border-blue-600",
+ },
+ borders: {
+ white: "border-white",
+ whiteDark: "border-white dark:border-slate-900",
+ lightDark: "border-gray-100 dark:border-slate-800",
+ contrast: "border-gray-800 dark:border-white",
+ success: "border-emerald-600 dark:border-emerald-500",
+ danger: "border-red-600 dark:border-red-500",
+ warning: "border-yellow-600 dark:border-yellow-500",
+ info: "border-blue-600 dark:border-blue-500",
+ },
+ text: {
+ contrast: "dark:text-slate-100",
+ success: "text-emerald-600 dark:text-emerald-500",
+ danger: "text-red-600 dark:text-red-500",
+ warning: "text-yellow-600 dark:text-yellow-500",
+ info: "text-blue-600 dark:text-blue-500",
+ },
+ outlineHover: {
+ contrast:
+ "hover:bg-gray-800 hover:text-gray-100 hover:dark:bg-slate-100 hover:dark:text-black",
+ success:
+ "hover:bg-emerald-600 hover:text-white hover:text-white hover:dark:text-white hover:dark:border-emerald-600",
+ danger:
+ "hover:bg-red-600 hover:text-white hover:text-white hover:dark:text-white hover:dark:border-red-600",
+ warning:
+ "hover:bg-yellow-600 hover:text-white hover:text-white hover:dark:text-white hover:dark:border-yellow-600",
+ info: "hover:bg-blue-600 hover:text-white hover:dark:text-white hover:dark:border-blue-600",
+ },
+ };
+
+ if (!colors.bg[color]) {
+ return color;
+ }
+
+ const isOutlinedProcessed =
+ isOutlined && ["white", "whiteDark", "lightDark"].indexOf(color) < 0;
+
+ const base = [colors.borders[color], colors.ring[color]];
+
+ if (isActive) {
+ base.push(colors.active[color]);
+ } else {
+ base.push(isOutlinedProcessed ? colors.text[color] : colors.bg[color]);
+ }
+
+ if (hasHover) {
+ base.push(
+ isOutlinedProcessed ? colors.outlineHover[color] : colors.bgHover[color]
+ );
+ }
+
+ return base;
+};
diff --git a/src/Publish/resources/js/config.js b/src/Publish/resources/js/config.js
new file mode 100644
index 0000000..a1b85a5
--- /dev/null
+++ b/src/Publish/resources/js/config.js
@@ -0,0 +1,5 @@
+export const darkModeKey = "darkMode";
+
+export const styleKey = "style";
+
+export const containerMaxW = "xl:mx-auto";
diff --git a/src/Publish/resources/js/menuAside.js b/src/Publish/resources/js/menuAside.js
new file mode 100644
index 0000000..b6a5143
--- /dev/null
+++ b/src/Publish/resources/js/menuAside.js
@@ -0,0 +1,79 @@
+import {
+ mdiAccountCircle,
+ mdiMonitor,
+ mdiGithub,
+ mdiLock,
+ mdiAlertCircle,
+ mdiSquareEditOutline,
+ mdiTable,
+ mdiViewList,
+ mdiTelevisionGuide,
+ mdiResponsive,
+ mdiPalette,
+} from "@mdi/js";
+
+export default [
+ {
+ to: "/dashboard",
+ icon: mdiMonitor,
+ label: "Dashboard",
+ },
+ {
+ to: "/tables",
+ label: "Tables",
+ icon: mdiTable,
+ },
+ {
+ to: "/forms",
+ label: "Forms",
+ icon: mdiSquareEditOutline,
+ },
+ {
+ to: "/ui",
+ label: "UI",
+ icon: mdiTelevisionGuide,
+ },
+ {
+ to: "/responsive",
+ label: "Responsive",
+ icon: mdiResponsive,
+ },
+ {
+ to: "/",
+ label: "Styles",
+ icon: mdiPalette,
+ },
+ {
+ to: "/profile",
+ label: "Profile",
+ icon: mdiAccountCircle,
+ },
+ {
+ to: "/login",
+ label: "Login",
+ icon: mdiLock,
+ },
+ {
+ to: "/error",
+ label: "Error",
+ icon: mdiAlertCircle,
+ },
+ {
+ label: "Dropdown",
+ icon: mdiViewList,
+ menu: [
+ {
+ label: "Item One",
+ },
+ {
+ label: "Item Two",
+ },
+ ],
+ },
+ {
+ href: "https://github.com/justboil/admin-one-vue-tailwind",
+ label: "GitHub",
+ icon: mdiGithub,
+ target: "_blank",
+ },
+];
diff --git a/src/Publish/resources/js/menuNavBar.js b/src/Publish/resources/js/menuNavBar.js
new file mode 100644
index 0000000..67e2ef6
--- /dev/null
+++ b/src/Publish/resources/js/menuNavBar.js
@@ -0,0 +1,52 @@
+import {
+ mdiMenu,
+ mdiClockOutline,
+ mdiCloud,
+ mdiCrop,
+ mdiAccount,
+ mdiCogOutline,
+ mdiEmail,
+ mdiLogout,
+ mdiThemeLightDark,
+ mdiTranslate,
+} from "@mdi/js";
+
+export default [
+
+ {
+ isCurrentUser: true,
+ menu: [
+ {
+ icon: mdiAccount,
+ label: "My Profile",
+ to: "/user/profile",
+ },
+ {
+ isDivider: true,
+ },
+ {
+ icon: mdiLogout,
+ label: "Log Out",
+ isLogout: true,
+ },
+ ],
+ },
+ {
+ icon: mdiThemeLightDark,
+ label: "Light/Dark",
+ isDesktopNoLabel: true,
+ isToggleLightDark: true,
+ },
+ {
+ icon: mdiTranslate,
+ label: "Change Language",
+ isDesktopNoLabel: true,
+ isChangeLanguage: true,
+ },
+ {
+ icon: mdiLogout,
+ label: "Log out",
+ isDesktopNoLabel: true,
+ isLogout: true,
+ },
+];
diff --git a/src/Publish/resources/js/styles.js b/src/Publish/resources/js/styles.js
new file mode 100644
index 0000000..a4782ba
--- /dev/null
+++ b/src/Publish/resources/js/styles.js
@@ -0,0 +1,25 @@
+export const basic = {
+ aside: "bg-gray-800",
+ asideScrollbars: "aside-scrollbars-gray",
+ asideBrand: "bg-gray-900 text-white",
+ asideMenuItem: "text-gray-300 hover:text-white",
+ asideMenuItemActive: "font-bold text-white",
+ asideMenuDropdown: "bg-gray-700/50",
+ navBarItemLabel: "text-black",
+ navBarItemLabelHover: "hover:text-blue-500",
+ navBarItemLabelActiveColor: "text-blue-600",
+ overlay: "from-gray-700 via-gray-900 to-gray-700",
+};
+
+export const white = {
+ aside: "bg-white",
+ asideScrollbars: "aside-scrollbars-light",
+ asideBrand: "",
+ asideMenuItem: "text-blue-600 hover:text-black dark:text-white",
+ asideMenuItemActive: "font-bold text-black dark:text-white",
+ asideMenuDropdown: "bg-gray-100/75",
+ navBarItemLabel: "text-blue-600",
+ navBarItemLabelHover: "hover:text-black",
+ navBarItemLabelActiveColor: "text-black",
+ overlay: "from-white via-gray-100 to-white",
+};
diff --git a/src/Publish/resources/views/app.blade.php b/src/Publish/resources/views/app.blade.php
new file mode 100644
index 0000000..983b3b1
--- /dev/null
+++ b/src/Publish/resources/views/app.blade.php
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+ {{ config('app.name', 'Laravel') }}
+
+
+
+ @routes
+ @vite(['resources/css/main.css', 'resources/js/app.js'])
+ @inertiaHead
+
+
+@inertia
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/action-message.blade.php b/src/Publish/resources/views/vendor/jetstream/components/action-message.blade.php
new file mode 100644
index 0000000..39e6eed
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/action-message.blade.php
@@ -0,0 +1,10 @@
+@props(['on'])
+
+merge(['class' => 'text-sm text-gray-600']) }}>
+ {{ $slot->isEmpty() ? 'Saved.' : $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/action-section.blade.php b/src/Publish/resources/views/vendor/jetstream/components/action-section.blade.php
new file mode 100644
index 0000000..4ab1ce9
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/action-section.blade.php
@@ -0,0 +1,12 @@
+merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>
+
+ {{ $title }}
+ {{ $description }}
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/application-logo.blade.php b/src/Publish/resources/views/vendor/jetstream/components/application-logo.blade.php
new file mode 100644
index 0000000..226a0dc
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/application-logo.blade.php
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/application-mark.blade.php b/src/Publish/resources/views/vendor/jetstream/components/application-mark.blade.php
new file mode 100644
index 0000000..182054e
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/application-mark.blade.php
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/authentication-card-logo.blade.php b/src/Publish/resources/views/vendor/jetstream/components/authentication-card-logo.blade.php
new file mode 100644
index 0000000..0b59654
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/authentication-card-logo.blade.php
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/authentication-card.blade.php b/src/Publish/resources/views/vendor/jetstream/components/authentication-card.blade.php
new file mode 100644
index 0000000..71235cf
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/authentication-card.blade.php
@@ -0,0 +1,9 @@
+
+
+ {{ $logo }}
+
+
+
+ {{ $slot }}
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/banner.blade.php b/src/Publish/resources/views/vendor/jetstream/components/banner.blade.php
new file mode 100644
index 0000000..74f53bc
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/banner.blade.php
@@ -0,0 +1,46 @@
+@props(['style' => session('flash.bannerStyle', 'success'), 'message' => session('flash.banner')])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/button.blade.php b/src/Publish/resources/views/vendor/jetstream/components/button.blade.php
new file mode 100644
index 0000000..ff1fed5
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/button.blade.php
@@ -0,0 +1,3 @@
+merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:border-gray-900 focus:ring focus:ring-gray-300 disabled:opacity-25 transition']) }}>
+ {{ $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/checkbox.blade.php b/src/Publish/resources/views/vendor/jetstream/components/checkbox.blade.php
new file mode 100644
index 0000000..fb43fdc
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/checkbox.blade.php
@@ -0,0 +1 @@
+ merge(['class' => 'rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>
diff --git a/src/Publish/resources/views/vendor/jetstream/components/confirmation-modal.blade.php b/src/Publish/resources/views/vendor/jetstream/components/confirmation-modal.blade.php
new file mode 100644
index 0000000..ee4896c
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/confirmation-modal.blade.php
@@ -0,0 +1,27 @@
+@props(['id' => null, 'maxWidth' => null])
+
+
+
+
+
+
+
+
+ {{ $title }}
+
+
+
+ {{ $content }}
+
+
+
+
+
+
+ {{ $footer }}
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/confirms-password.blade.php b/src/Publish/resources/views/vendor/jetstream/components/confirms-password.blade.php
new file mode 100644
index 0000000..5341185
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/confirms-password.blade.php
@@ -0,0 +1,46 @@
+@props(['title' => __('Confirm Password'), 'content' => __('For your security, please confirm your password to continue.'), 'button' => __('Confirm')])
+
+@php
+ $confirmableId = md5($attributes->wire('then'));
+@endphp
+
+wire('then') }}
+ x-data
+ x-ref="span"
+ x-on:click="$wire.startConfirmingPassword('{{ $confirmableId }}')"
+ x-on:password-confirmed.window="setTimeout(() => $event.detail.id === '{{ $confirmableId }}' && $refs.span.dispatchEvent(new CustomEvent('then', { bubbles: false })), 250);"
+>
+ {{ $slot }}
+
+
+@once
+
+
+ {{ $title }}
+
+
+
+ {{ $content }}
+
+
+
+
+
+
+
+
+
+
+ {{ __('Cancel') }}
+
+
+
+ {{ $button }}
+
+
+
+@endonce
diff --git a/src/Publish/resources/views/vendor/jetstream/components/danger-button.blade.php b/src/Publish/resources/views/vendor/jetstream/components/danger-button.blade.php
new file mode 100644
index 0000000..876b3e5
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/danger-button.blade.php
@@ -0,0 +1,3 @@
+merge(['type' => 'button', 'class' => 'inline-flex items-center justify-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 focus:outline-none focus:border-red-700 focus:ring focus:ring-red-200 active:bg-red-600 disabled:opacity-25 transition']) }}>
+ {{ $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/dialog-modal.blade.php b/src/Publish/resources/views/vendor/jetstream/components/dialog-modal.blade.php
new file mode 100644
index 0000000..0935941
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/dialog-modal.blade.php
@@ -0,0 +1,17 @@
+@props(['id' => null, 'maxWidth' => null])
+
+
+
+
+ {{ $title }}
+
+
+
+ {{ $content }}
+
+
+
+
+ {{ $footer }}
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/dropdown-link.blade.php b/src/Publish/resources/views/vendor/jetstream/components/dropdown-link.blade.php
new file mode 100644
index 0000000..6b608ff
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/dropdown-link.blade.php
@@ -0,0 +1 @@
+merge(['class' => 'block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition']) }}>{{ $slot }}
diff --git a/src/Publish/resources/views/vendor/jetstream/components/dropdown.blade.php b/src/Publish/resources/views/vendor/jetstream/components/dropdown.blade.php
new file mode 100644
index 0000000..5fd9f91
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/dropdown.blade.php
@@ -0,0 +1,47 @@
+@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white', 'dropdownClasses' => ''])
+
+@php
+switch ($align) {
+ case 'left':
+ $alignmentClasses = 'origin-top-left left-0';
+ break;
+ case 'top':
+ $alignmentClasses = 'origin-top';
+ break;
+ case 'none':
+ case 'false':
+ $alignmentClasses = '';
+ break;
+ case 'right':
+ default:
+ $alignmentClasses = 'origin-top-right right-0';
+ break;
+}
+
+switch ($width) {
+ case '48':
+ $width = 'w-48';
+ break;
+}
+@endphp
+
+
+
+ {{ $trigger }}
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/form-section.blade.php b/src/Publish/resources/views/vendor/jetstream/components/form-section.blade.php
new file mode 100644
index 0000000..791387b
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/form-section.blade.php
@@ -0,0 +1,24 @@
+@props(['submit'])
+
+merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>
+
+ {{ $title }}
+ {{ $description }}
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/input-error.blade.php b/src/Publish/resources/views/vendor/jetstream/components/input-error.blade.php
new file mode 100644
index 0000000..b5ad968
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/input-error.blade.php
@@ -0,0 +1,5 @@
+@props(['for'])
+
+@error($for)
+ merge(['class' => 'text-sm text-red-600']) }}>{{ $message }}
+@enderror
diff --git a/src/Publish/resources/views/vendor/jetstream/components/input.blade.php b/src/Publish/resources/views/vendor/jetstream/components/input.blade.php
new file mode 100644
index 0000000..78b18ee
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/input.blade.php
@@ -0,0 +1,3 @@
+@props(['disabled' => false])
+
+ merge(['class' => 'border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm']) !!}>
diff --git a/src/Publish/resources/views/vendor/jetstream/components/label.blade.php b/src/Publish/resources/views/vendor/jetstream/components/label.blade.php
new file mode 100644
index 0000000..1cc65e2
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/label.blade.php
@@ -0,0 +1,5 @@
+@props(['value'])
+
+merge(['class' => 'block font-medium text-sm text-gray-700']) }}>
+ {{ $value ?? $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/modal.blade.php b/src/Publish/resources/views/vendor/jetstream/components/modal.blade.php
new file mode 100644
index 0000000..4acdbf0
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/modal.blade.php
@@ -0,0 +1,68 @@
+@props(['id', 'maxWidth'])
+
+@php
+$id = $id ?? md5($attributes->wire('model'));
+
+$maxWidth = [
+ 'sm' => 'sm:max-w-sm',
+ 'md' => 'sm:max-w-md',
+ 'lg' => 'sm:max-w-lg',
+ 'xl' => 'sm:max-w-xl',
+ '2xl' => 'sm:max-w-2xl',
+][$maxWidth ?? '2xl'];
+@endphp
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/nav-link.blade.php b/src/Publish/resources/views/vendor/jetstream/components/nav-link.blade.php
new file mode 100644
index 0000000..7092642
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/nav-link.blade.php
@@ -0,0 +1,11 @@
+@props(['active'])
+
+@php
+$classes = ($active ?? false)
+ ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition'
+ : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition';
+@endphp
+
+merge(['class' => $classes]) }}>
+ {{ $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/responsive-nav-link.blade.php b/src/Publish/resources/views/vendor/jetstream/components/responsive-nav-link.blade.php
new file mode 100644
index 0000000..5e7987f
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/responsive-nav-link.blade.php
@@ -0,0 +1,11 @@
+@props(['active'])
+
+@php
+$classes = ($active ?? false)
+ ? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition'
+ : 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition';
+@endphp
+
+merge(['class' => $classes]) }}>
+ {{ $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/secondary-button.blade.php b/src/Publish/resources/views/vendor/jetstream/components/secondary-button.blade.php
new file mode 100644
index 0000000..e9dc695
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/secondary-button.blade.php
@@ -0,0 +1,3 @@
+merge(['type' => 'button', 'class' => 'inline-flex items-center px-4 py-2 bg-white border border-gray-300 rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest shadow-sm hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:ring focus:ring-blue-200 active:text-gray-800 active:bg-gray-50 disabled:opacity-25 transition']) }}>
+ {{ $slot }}
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/section-border.blade.php b/src/Publish/resources/views/vendor/jetstream/components/section-border.blade.php
new file mode 100644
index 0000000..414ade6
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/section-border.blade.php
@@ -0,0 +1,5 @@
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/section-title.blade.php b/src/Publish/resources/views/vendor/jetstream/components/section-title.blade.php
new file mode 100644
index 0000000..72e5193
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/section-title.blade.php
@@ -0,0 +1,13 @@
+
+
+
{{ $title }}
+
+
+ {{ $description }}
+
+
+
+
+ {{ $aside ?? '' }}
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/switchable-team.blade.php b/src/Publish/resources/views/vendor/jetstream/components/switchable-team.blade.php
new file mode 100644
index 0000000..c621adf
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/switchable-team.blade.php
@@ -0,0 +1,19 @@
+@props(['team', 'component' => 'jet-dropdown-link'])
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/components/validation-errors.blade.php b/src/Publish/resources/views/vendor/jetstream/components/validation-errors.blade.php
new file mode 100644
index 0000000..ef753f5
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/validation-errors.blade.php
@@ -0,0 +1,11 @@
+@if ($errors->any())
+
+
{{ __('Whoops! Something went wrong.') }}
+
+
+ @foreach ($errors->all() as $error)
+ {{ $error }}
+ @endforeach
+
+
+@endif
diff --git a/src/Publish/resources/views/vendor/jetstream/components/welcome.blade.php b/src/Publish/resources/views/vendor/jetstream/components/welcome.blade.php
new file mode 100644
index 0000000..10bee57
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/components/welcome.blade.php
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ Welcome to your Jetstream application!
+
+
+
+ Laravel Jetstream provides a beautiful, robust starting point for your next Laravel application. Laravel is designed
+ to help you build your application using a development environment that is simple, powerful, and enjoyable. We believe
+ you should love expressing your creativity through programming, so we have spent time carefully crafting the Laravel
+ ecosystem to be a breath of fresh air. We hope you love it.
+
+
+
+
+
+
+
+
+
+ Laravel has wonderful documentation covering every aspect of the framework. Whether you're new to the framework or have previous experience, we recommend reading all of the documentation from beginning to end.
+
+
+
+
+
Explore the documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
+
+
+
+
+
Start watching Laracasts
+
+
+
+
+
+
+
+
+
+
+
+
+ Laravel Jetstream is built with Tailwind, an amazing utility first CSS framework that doesn't get in your way. You'll be amazed how easily you can build and maintain fresh, modern designs with this wonderful framework at your fingertips.
+
+
+
+
+
+
+
+
+
+ Authentication and registration views are included with Laravel Jetstream, as well as support for user email verification and resetting forgotten passwords. So, you're free to get started what matters most: building your application.
+
+
+
+
diff --git a/src/Publish/resources/views/vendor/jetstream/mail/team-invitation.blade.php b/src/Publish/resources/views/vendor/jetstream/mail/team-invitation.blade.php
new file mode 100644
index 0000000..1701212
--- /dev/null
+++ b/src/Publish/resources/views/vendor/jetstream/mail/team-invitation.blade.php
@@ -0,0 +1,23 @@
+@component('mail::message')
+{{ __('You have been invited to join the :team team!', ['team' => $invitation->team->name]) }}
+
+@if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::registration()))
+{{ __('If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:') }}
+
+@component('mail::button', ['url' => route('register')])
+{{ __('Create Account') }}
+@endcomponent
+
+{{ __('If you already have an account, you may accept this invitation by clicking the button below:') }}
+
+@else
+{{ __('You may accept this invitation by clicking the button below:') }}
+@endif
+
+
+@component('mail::button', ['url' => $acceptUrl])
+{{ __('Accept Invitation') }}
+@endcomponent
+
+{{ __('If you did not expect to receive an invitation to this team, you may discard this email.') }}
+@endcomponent
diff --git a/src/Publish/stubs/nwidart-stubs/assets/js/app.stub b/src/Publish/stubs/nwidart-stubs/assets/js/app.stub
new file mode 100644
index 0000000..e69de29
diff --git a/src/Publish/stubs/nwidart-stubs/assets/sass/app.stub b/src/Publish/stubs/nwidart-stubs/assets/sass/app.stub
new file mode 100644
index 0000000..e69de29
diff --git a/src/Publish/stubs/nwidart-stubs/command.stub b/src/Publish/stubs/nwidart-stubs/command.stub
new file mode 100644
index 0000000..87469de
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/command.stub
@@ -0,0 +1,68 @@
+
+
+
diff --git a/src/Publish/stubs/nwidart-stubs/composer.stub b/src/Publish/stubs/nwidart-stubs/composer.stub
new file mode 100644
index 0000000..8615cda
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/composer.stub
@@ -0,0 +1,23 @@
+{
+ "name": "$VENDOR$/$LOWER_NAME$",
+ "description": "",
+ "authors": [
+ {
+ "name": "$AUTHOR_NAME$",
+ "email": "$AUTHOR_EMAIL$"
+ }
+ ],
+ "extra": {
+ "laravel": {
+ "providers": [],
+ "aliases": {
+
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\": ""
+ }
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/controller-api.stub b/src/Publish/stubs/nwidart-stubs/controller-api.stub
new file mode 100644
index 0000000..8cdac7c
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/controller-api.stub
@@ -0,0 +1,60 @@
+get('/');
+
+ $response->assertStatus(200);
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/job-queued.stub b/src/Publish/stubs/nwidart-stubs/job-queued.stub
new file mode 100644
index 0000000..5bcccf1
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/job-queued.stub
@@ -0,0 +1,34 @@
+view('view.name');
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/middleware.stub b/src/Publish/stubs/nwidart-stubs/middleware.stub
new file mode 100644
index 0000000..954583e
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/middleware.stub
@@ -0,0 +1,21 @@
+id();
+$FIELDS$
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('$TABLE$');
+ }
+};
diff --git a/src/Publish/stubs/nwidart-stubs/migration/delete.stub b/src/Publish/stubs/nwidart-stubs/migration/delete.stub
new file mode 100644
index 0000000..4d1e064
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/migration/delete.stub
@@ -0,0 +1,32 @@
+bigIncrements('id');
+$FIELDS$
+ $table->timestamps();
+ });
+ }
+};
diff --git a/src/Publish/stubs/nwidart-stubs/migration/plain.stub b/src/Publish/stubs/nwidart-stubs/migration/plain.stub
new file mode 100644
index 0000000..e46b052
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/migration/plain.stub
@@ -0,0 +1,28 @@
+line('The introduction to the notification.')
+ ->action('Notification Action', 'https://laravel.com')
+ ->line('Thank you for using our application!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/package.stub b/src/Publish/stubs/nwidart-stubs/package.stub
new file mode 100644
index 0000000..7303146
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/package.stub
@@ -0,0 +1,21 @@
+{
+ "private": true,
+ "scripts": {
+ "dev": "npm run development",
+ "development": "mix",
+ "watch": "mix watch",
+ "watch-poll": "mix watch -- --watch-options-poll=1000",
+ "hot": "mix watch --hot",
+ "prod": "npm run production",
+ "production": "mix --production"
+ },
+ "devDependencies": {
+ "axios": "^0.21.4",
+ "dotenv": "^10.0.0",
+ "dotenv-expand": "^5.1.0",
+ "laravel-mix": "^6.0.31",
+ "laravel-mix-merge-manifest": "^2.0.0",
+ "lodash": "^4.17.21",
+ "postcss": "^8.3.7"
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/policy.plain.stub b/src/Publish/stubs/nwidart-stubs/policy.plain.stub
new file mode 100644
index 0000000..02e16df
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/policy.plain.stub
@@ -0,0 +1,20 @@
+mapApiRoutes();
+
+ $this->mapWebRoutes();
+ }
+
+ /**
+ * Define the "web" routes for the application.
+ *
+ * These routes all receive session state, CSRF protection, etc.
+ *
+ * @return void
+ */
+ protected function mapWebRoutes()
+ {
+ Route::middleware('web')
+ ->namespace($this->moduleNamespace)
+ ->group(module_path('$MODULE$', '$WEB_ROUTES_PATH$'));
+ }
+
+ /**
+ * Define the "api" routes for the application.
+ *
+ * These routes are typically stateless.
+ *
+ * @return void
+ */
+ protected function mapApiRoutes()
+ {
+ Route::prefix('api')
+ ->middleware('api')
+ ->namespace($this->moduleNamespace)
+ ->group(module_path('$MODULE$', '$API_ROUTES_PATH$'));
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/routes/api.stub b/src/Publish/stubs/nwidart-stubs/routes/api.stub
new file mode 100644
index 0000000..78681d7
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/routes/api.stub
@@ -0,0 +1,18 @@
+get('/$LOWER_NAME$', function (Request $request) {
+ return $request->user();
+});
\ No newline at end of file
diff --git a/src/Publish/stubs/nwidart-stubs/routes/web.stub b/src/Publish/stubs/nwidart-stubs/routes/web.stub
new file mode 100644
index 0000000..ab7e7f7
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/routes/web.stub
@@ -0,0 +1,16 @@
+group(function() {
+ Route::get('/', '$STUDLY_NAME$Controller@index');
+});
diff --git a/src/Publish/stubs/nwidart-stubs/rule.stub b/src/Publish/stubs/nwidart-stubs/rule.stub
new file mode 100644
index 0000000..9b71632
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/rule.stub
@@ -0,0 +1,40 @@
+ '$STUDLY_NAME$'
+];
diff --git a/src/Publish/stubs/nwidart-stubs/scaffold/provider.stub b/src/Publish/stubs/nwidart-stubs/scaffold/provider.stub
new file mode 100644
index 0000000..8dc215a
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/scaffold/provider.stub
@@ -0,0 +1,119 @@
+registerTranslations();
+ $this->registerConfig();
+ $this->registerViews();
+ $this->loadMigrationsFrom(module_path($this->moduleName, '$MIGRATIONS_PATH$'));
+ VILT::loadResources($this->moduleName);
+ VILT::loadPages($this->moduleName);
+ VILT::registerTranslation(Lang::make('$LOWER_NAME$.sidebar')->label(__('$MODULE$')));
+ }
+
+ /**
+ * Register the service provider.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $this->app->register(RouteServiceProvider::class);
+ }
+
+ /**
+ * Register config.
+ *
+ * @return void
+ */
+ protected function registerConfig()
+ {
+ $this->publishes([
+ module_path($this->moduleName, '$PATH_CONFIG$/config.php') => config_path($this->moduleNameLower . '.php'),
+ ], 'config');
+ $this->mergeConfigFrom(
+ module_path($this->moduleName, '$PATH_CONFIG$/config.php'), $this->moduleNameLower
+ );
+ }
+
+ /**
+ * Register views.
+ *
+ * @return void
+ */
+ public function registerViews()
+ {
+ $viewPath = resource_path('views/modules/' . $this->moduleNameLower);
+
+ $sourcePath = module_path($this->moduleName, '$PATH_VIEWS$');
+
+ $this->publishes([
+ $sourcePath => $viewPath
+ ], ['views', $this->moduleNameLower . '-module-views']);
+
+ $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower);
+ }
+
+ /**
+ * Register translations.
+ *
+ * @return void
+ */
+ public function registerTranslations()
+ {
+ $langPath = resource_path('lang/modules/' . $this->moduleNameLower);
+
+ if (is_dir($langPath)) {
+ $this->loadTranslationsFrom($langPath, $this->moduleNameLower);
+ $this->loadJsonTranslationsFrom($langPath, $this->moduleNameLower);
+ } else {
+ $this->loadTranslationsFrom(module_path($this->moduleName, '$PATH_LANG$'), $this->moduleNameLower);
+ $this->loadJsonTranslationsFrom(module_path($this->moduleName, '$PATH_LANG$'), $this->moduleNameLower);
+ }
+ }
+
+ /**
+ * Get the services provided by the provider.
+ *
+ * @return array
+ */
+ public function provides()
+ {
+ return [];
+ }
+
+ private function getPublishableViewPaths(): array
+ {
+ $paths = [];
+ foreach (\Config::get('view.paths') as $path) {
+ if (is_dir($path . '/modules/' . $this->moduleNameLower)) {
+ $paths[] = $path . '/modules/' . $this->moduleNameLower;
+ }
+ }
+ return $paths;
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/seeder.stub b/src/Publish/stubs/nwidart-stubs/seeder.stub
new file mode 100644
index 0000000..f35057d
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/seeder.stub
@@ -0,0 +1,21 @@
+call("OthersTableSeeder");
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/unit-test.stub b/src/Publish/stubs/nwidart-stubs/unit-test.stub
new file mode 100644
index 0000000..be0bd55
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/unit-test.stub
@@ -0,0 +1,20 @@
+assertTrue(true);
+ }
+}
diff --git a/src/Publish/stubs/nwidart-stubs/views/index.stub b/src/Publish/stubs/nwidart-stubs/views/index.stub
new file mode 100644
index 0000000..04b9288
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/views/index.stub
@@ -0,0 +1,9 @@
+@extends('$LOWER_NAME$::layouts.master')
+
+@section('content')
+ Hello World
+
+
+ This view is loaded from module: {!! config('$LOWER_NAME$.name') !!}
+
+@endsection
diff --git a/src/Publish/stubs/nwidart-stubs/views/master.stub b/src/Publish/stubs/nwidart-stubs/views/master.stub
new file mode 100644
index 0000000..bb09abb
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/views/master.stub
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Module $STUDLY_NAME$
+
+ {{-- Laravel Mix - CSS File --}}
+ {{-- --}}
+
+
+
+ @yield('content')
+
+ {{-- Laravel Mix - JS File --}}
+ {{-- --}}
+
+
diff --git a/src/Publish/stubs/nwidart-stubs/webpack.stub b/src/Publish/stubs/nwidart-stubs/webpack.stub
new file mode 100644
index 0000000..639a553
--- /dev/null
+++ b/src/Publish/stubs/nwidart-stubs/webpack.stub
@@ -0,0 +1,14 @@
+const dotenvExpand = require('dotenv-expand');
+dotenvExpand(require('dotenv').config({ path: '../../.env'/*, debug: true*/}));
+
+const mix = require('laravel-mix');
+require('laravel-mix-merge-manifest');
+
+mix.setPublicPath('../../public').mergeManifest();
+
+mix.js(__dirname + '/Resources/assets/js/app.js', 'js/$LOWER_NAME$.js')
+ .sass( __dirname + '/Resources/assets/sass/app.scss', 'css/$LOWER_NAME$.css');
+
+if (mix.inProduction()) {
+ mix.version();
+}
diff --git a/src/Publish/tailwind.config.js b/src/Publish/tailwind.config.js
new file mode 100644
index 0000000..c2992be
--- /dev/null
+++ b/src/Publish/tailwind.config.js
@@ -0,0 +1,97 @@
+const plugin = require("tailwindcss/plugin");
+const colors = require("tailwindcss/colors");
+
+module.exports = {
+ content: [
+ "./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php",
+ "./storage/framework/views/*.php",
+ "./resources/views/**/*.blade.php",
+ "./resources/js/**/*.vue",
+ "./Modules/**/Resources/views/**/*.vue",
+ "./Modules/**/Services/Rows/Render/**/*.vue",
+ "./Modules/**/Services/Resource/Render/**/*.vue",
+ './resources/js/**/*.js',
+ ],
+ darkMode: "class", // or 'media' or 'class'
+ theme: {
+
+ asideScrollbars: {
+ light: "light",
+ gray: "gray",
+ },
+ extend: {
+ colors: {
+ main: colors.blue[700],
+ secondary: "#014894",
+ danger: colors.rose,
+ primary: colors.blue,
+ success: colors.green,
+ warning: colors.amber,
+ black: colors.black,
+ },
+ zIndex: {
+ "-1": "-1",
+ },
+ flexGrow: {
+ 5: "5",
+ },
+ maxHeight: {
+ "screen-menu": "calc(100vh - 3.5rem)",
+ modal: "calc(100vh - 160px)",
+ },
+ transitionProperty: {
+ position: "right, left, top, bottom, margin, padding",
+ textColor: "color",
+ },
+ keyframes: {
+ "fade-out": {
+ from: { opacity: 1 },
+ to: { opacity: 0 },
+ },
+ "fade-in": {
+ from: { opacity: 0 },
+ to: { opacity: 1 },
+ },
+ },
+ animation: {
+ "fade-out": "fade-out 250ms ease-in-out",
+ "fade-in": "fade-in 250ms ease-in-out",
+ },
+ },
+ },
+ plugins: [
+ require("@tailwindcss/forms"),
+ plugin(function ({ matchUtilities, theme }) {
+ matchUtilities(
+ {
+ "aside-scrollbars": (value) => {
+ const track = value === "light" ? "100" : "900";
+ const thumb = value === "light" ? "300" : "600";
+ const color = value === "light" ? "gray" : value;
+
+ return {
+ scrollbarWidth: "thin",
+ scrollbarColor: `${theme(`colors.${color}.${thumb}`)} ${theme(
+ `colors.${color}.${track}`
+ )}`,
+ "&::-webkit-scrollbar": {
+ width: "8px",
+ height: "8px",
+ },
+ "&::-webkit-scrollbar-track": {
+ backgroundColor: theme(`colors.${color}.${track}`),
+ },
+ "&::-webkit-scrollbar-thumb": {
+ borderRadius: "0.25rem",
+ backgroundColor: theme(`colors.${color}.${thumb}`),
+ },
+ };
+ },
+ },
+ { values: theme("asideScrollbars") }
+ );
+ }),
+ require("@tailwindcss/line-clamp"),
+ require("tailwindcss-rtl"),
+ ],
+};
diff --git a/src/Publish/vite.config.js b/src/Publish/vite.config.js
new file mode 100644
index 0000000..c04e506
--- /dev/null
+++ b/src/Publish/vite.config.js
@@ -0,0 +1,63 @@
+import { defineConfig, loadEnv } from "vite";
+import laravel from "laravel-vite-plugin";
+import vue from "@vitejs/plugin-vue";
+import { homedir } from "os";
+import { resolve } from "path";
+import fs from "fs";
+
+export default ({ mode }) => {
+ process.env = Object.assign(process.env, loadEnv(mode, process.cwd(), ''));
+
+ function serverData(host){
+ /*
+ Use only if using laravel-valet to manage server
+ */
+ let keyPath = resolve(homedir(), `.valet/Certificates/${host}.key`);
+ let certificatePath = resolve(homedir(), `.valet/Certificates/${host}.crt`);
+
+ if (!fs.existsSync(keyPath)) {
+ return {};
+ }
+
+ if (!fs.existsSync(certificatePath)) {
+ return {};
+ }
+
+ return {
+ hmr: { host },
+ host,
+ https: {
+ key: fs.readFileSync(keyPath),
+ cert: fs.readFileSync(certificatePath),
+ },
+ };
+ }
+ return defineConfig({
+ resolve:{
+ alias:{
+ '$$' : resolve(__dirname, './Modules/Base/Services/Rows/Render/'),
+ '@@' : resolve(__dirname, './Modules/Base/Services/Resource/Render/'),
+ },
+ },
+ plugins: [
+ laravel(["resources/js/app.js", "resources/css/main.css"]),
+ vue({
+ template: {
+ transformAssetUrls: {
+ base: null,
+ includeAbsolute: false,
+ },
+ },
+ }),
+ ],
+ css: {
+ postCss: {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+ },
+ },
+ server: serverData(process.env.APP_URL.replace('https://',''))
+ });
+}
diff --git a/src/ViltServiceProvider.php b/src/ViltServiceProvider.php
new file mode 100644
index 0000000..cc3d2f2
--- /dev/null
+++ b/src/ViltServiceProvider.php
@@ -0,0 +1,31 @@
+commands([
+ InstallVilt::class
+ ]);
+ }
+
+ /**
+ * Bootstrap any application services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ //
+ }
+}