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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + +