From e5aad4d170a87e8705bad0333b14223e99a407a8 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 5 Jun 2023 12:07:55 +0200 Subject: [PATCH] updates --- .../Livewire/Project/Application/Deploy.php | 9 +- .../Application/EnvironmentVariable/Add.php | 6 +- .../Application/EnvironmentVariable/All.php | 1 + .../Livewire/Project/Application/Status.php | 2 +- .../Project/New/PublicGitRepository.php | 76 +++++++---- app/Jobs/ApplicationDeploymentJob.php | 82 ++++++++---- app/Models/Application.php | 26 +++- app/Models/EnvironmentVariable.php | 17 ++- ...548_create_environment_variables_table.php | 7 +- package-lock.json | 8 +- package.json | 2 +- resources/css/app.css | 8 +- .../components/applications/navbar.blade.php | 43 ++++-- .../views/components/forms/select.blade.php | 20 +-- resources/views/components/git-icon.blade.php | 18 +++ resources/views/components/loading.blade.php | 2 +- .../views/livewire/activity-monitor.blade.php | 11 +- .../livewire/notifications/test.blade.php | 3 +- .../project/application/deploy.blade.php | 122 ++++++++++++++---- .../application/deployment-logs.blade.php | 11 +- .../project/application/deployments.blade.php | 7 +- .../project/application/destination.blade.php | 4 +- .../environment-variable/add.blade.php | 8 +- .../environment-variable/all.blade.php | 23 ++-- .../environment-variable/show.blade.php | 20 +-- .../project/application/general.blade.php | 4 +- .../project/application/previews.blade.php | 78 +++++++---- .../project/application/rollback.blade.php | 8 +- .../project/application/source.blade.php | 33 +++-- .../project/application/status.blade.php | 10 +- .../application/storages/add.blade.php | 4 +- .../application/storages/all.blade.php | 9 +- .../new/public-git-repository.blade.php | 41 +++++- .../views/livewire/server/form.blade.php | 2 +- .../livewire/server/proxy/deploy.blade.php | 8 +- .../livewire/server/proxy/status.blade.php | 4 +- .../livewire/source/github/change.blade.php | 2 +- .../views/livewire/switch-team.blade.php | 4 +- .../application/configuration.blade.php | 3 + .../project/application/deployment.blade.php | 3 + .../project/application/deployments.blade.php | 5 +- resources/views/team/show.blade.php | 2 +- 42 files changed, 518 insertions(+), 238 deletions(-) create mode 100644 resources/views/components/git-icon.blade.php diff --git a/app/Http/Livewire/Project/Application/Deploy.php b/app/Http/Livewire/Project/Application/Deploy.php index f78ad8e23..c37e33913 100644 --- a/app/Http/Livewire/Project/Application/Deploy.php +++ b/app/Http/Livewire/Project/Application/Deploy.php @@ -21,7 +21,7 @@ class Deploy extends Component protected $source; protected $listeners = [ - 'applicationStatusChanged' => 'applicationStatusChanged', + 'applicationStatusChanged', ]; public function mount() @@ -40,8 +40,12 @@ protected function set_deployment_uuid() $this->deployment_uuid = new Cuid2(7); $this->parameters['deployment_uuid'] = $this->deployment_uuid; } - public function deploy(bool $force = false) + public function deploy(bool $force = false, bool|null $debug = null) { + if ($debug && !$this->application->settings->is_debug_enabled) { + $this->application->settings->is_debug_enabled = true; + $this->application->settings->save(); + } $this->set_deployment_uuid(); queue_application_deployment( @@ -62,5 +66,6 @@ public function stop() instant_remote_process(["docker rm -f {$this->application->uuid}"], $this->application->destination->server); $this->application->status = get_container_status(server: $this->application->destination->server, container_id: $this->application->uuid); $this->application->save(); + $this->emit('applicationStatusChanged'); } } diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php index 6c3eebb28..8d6830834 100644 --- a/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php +++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php @@ -2,15 +2,12 @@ namespace App\Http\Livewire\Project\Application\EnvironmentVariable; -use App\Models\Application; -use App\Models\EnvironmentVariable; -use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Route; use Livewire\Component; class Add extends Component { public $parameters; + public bool $is_preview = false; public string $key; public string $value; public bool $is_build_time = false; @@ -32,6 +29,7 @@ public function submit() 'key' => $this->key, 'value' => $this->value, 'is_build_time' => $this->is_build_time, + 'is_preview' => $this->is_preview, ]); } public function clear() diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php index 99366e5e8..f2d6f9a64 100644 --- a/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php +++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php @@ -21,6 +21,7 @@ public function submit($data) 'key' => $data['key'], 'value' => $data['value'], 'is_build_time' => $data['is_build_time'], + 'is_preview' => $data['is_preview'], 'application_id' => $this->application->id, ]); $this->application->refresh(); diff --git a/app/Http/Livewire/Project/Application/Status.php b/app/Http/Livewire/Project/Application/Status.php index 34a33b348..107cce4ae 100644 --- a/app/Http/Livewire/Project/Application/Status.php +++ b/app/Http/Livewire/Project/Application/Status.php @@ -11,7 +11,7 @@ class Status extends Component public function applicationStatusChanged() { - $this->emit('applicationStatusChanged'); $this->application->refresh(); + $this->emit('applicationStatusChanged'); } } diff --git a/app/Http/Livewire/Project/New/PublicGitRepository.php b/app/Http/Livewire/Project/New/PublicGitRepository.php index 2b68f24e2..89032ed0b 100644 --- a/app/Http/Livewire/Project/New/PublicGitRepository.php +++ b/app/Http/Livewire/Project/New/PublicGitRepository.php @@ -14,16 +14,22 @@ class PublicGitRepository extends Component { public string $repository_url; + private object $repository_url_parsed; + public int $port = 3000; public string $type; public $parameters; public $query; - public $github_apps; - public $gitlab_apps; - + public $branches = []; + public string $selected_branch = 'main'; public bool $is_static = false; - public null|string $publish_directory = null; + public string|null $publish_directory = null; + + private GithubApp|GitlabApp $git_source; + private string $git_host; + private string $git_repository; + private string $git_branch; protected $rules = [ 'repository_url' => 'required|url', @@ -34,7 +40,7 @@ class PublicGitRepository extends Component public function mount() { if (config('app.env') === 'local') { - $this->repository_url = 'https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify'; + $this->repository_url = 'https://github.com/coollabsio/coolify-examples'; $this->port = 3000; } $this->parameters = get_parameters(); @@ -52,18 +58,43 @@ public function instantSave() } $this->emit('saved', 'Application settings updated!'); } + public function load_branches() + { + $this->get_git_source(); + try { + ['data' => $data] = get_from_git_api($this->git_source, "/repos/{$this->git_repository}/branches"); + $this->branches = collect($data)->pluck('name')->toArray(); + } catch (\Throwable $th) { + return general_error_handler($th, $this); + } + } + private function get_git_source() + { + $this->repository_url_parsed = Url::fromString($this->repository_url); + $this->git_host = $this->repository_url_parsed->getHost(); + $this->git_repository = $this->repository_url_parsed->getSegment(1) . '/' . $this->repository_url_parsed->getSegment(2); + $this->git_branch = $this->repository_url_parsed->getSegment(4) ?? 'main'; + + if ($this->git_host == 'github.com') { + $this->git_source = GithubApp::where('name', 'Public GitHub')->first(); + } elseif ($this->git_host == 'gitlab.com') { + $this->git_source = GitlabApp::where('name', 'Public GitLab')->first(); + } elseif ($this->git_host == 'bitbucket.org') { + // Not supported yet + } + } public function submit() { try { $this->validate(); - - $url = Url::fromString($this->repository_url); - $git_host = $url->getHost(); - $git_repository = $url->getSegment(1) . '/' . $url->getSegment(2); - $git_branch = $url->getSegment(4) ?? 'main'; - $destination_uuid = $this->query['destination']; + $project_uuid = $this->parameters['project_uuid']; + $environment_name = $this->parameters['environment_name']; + + $this->get_git_source(); + $this->git_branch = $this->selected_branch ?? $this->git_branch; + $destination = StandaloneDocker::where('uuid', $destination_uuid)->first(); if (!$destination) { $destination = SwarmDocker::where('uuid', $destination_uuid)->first(); @@ -73,29 +104,24 @@ public function submit() } $destination_class = $destination->getMorphClass(); - $project = Project::where('uuid', $this->parameters['project_uuid'])->first(); - $environment = $project->load(['environments'])->environments->where('name', $this->parameters['environment_name'])->first(); + $project = Project::where('uuid', $project_uuid)->first(); + $environment = $project->load(['environments'])->environments->where('name', $environment_name)->first(); $application_init = [ - 'name' => generate_application_name($git_repository, $git_branch), - 'git_repository' => $git_repository, - 'git_branch' => $git_branch, + 'name' => generate_application_name($this->git_repository, $this->git_branch), + 'git_repository' => $this->git_repository, + 'git_branch' => $this->git_branch, 'build_pack' => 'nixpacks', 'ports_exposes' => $this->port, 'publish_directory' => $this->publish_directory, 'environment_id' => $environment->id, 'destination_id' => $destination->id, 'destination_type' => $destination_class, + 'source_id' => $this->git_source->id, + 'source_type' => $this->git_source->getMorphClass() ]; - if ($git_host == 'github.com') { - $application_init['source_id'] = GithubApp::where('name', 'Public GitHub')->first()->id; - $application_init['source_type'] = GithubApp::class; - } elseif ($git_host == 'gitlab.com') { - $application_init['source_id'] = GitlabApp::where('name', 'Public GitLab')->first()->id; - $application_init['source_type'] = GitlabApp::class; - } elseif ($git_host == 'bitbucket.org') { - } + $application = Application::create($application_init); $application->settings->is_static = $this->is_static; $application->settings->save(); @@ -106,7 +132,7 @@ public function submit() 'application_uuid' => $application->uuid, ]); } catch (\Exception $e) { - return general_error_handler($e); + return general_error_handler($e, $this); } } } diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 296f5237b..45dd0dcea 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -63,7 +63,7 @@ public function __construct( $this->application = Application::find($this->application_id); - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { $this->preview = ApplicationPreview::findPreviewByApplicationAndPullId($this->application->id, $this->pull_request_id); } @@ -97,7 +97,7 @@ public function handle(): void } $this->workdir = "/artifacts/{$this->deployment_uuid}"; - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { ray('Deploying pull/' . $this->pull_request_id . '/head for application: ' . $this->application->name); $this->deploy_pull_request(); } else { @@ -177,7 +177,7 @@ private function build_image() "echo -n 'Building image... '", ]); - if ($this->application->settings->is_static) { + if ($this->application->settings->is_static && isset($this->application->build_command)) { $this->execute_now([ $this->execute_in_builder("docker build -f {$this->workdir}/Dockerfile {$this->build_args} --progress plain -t { $this->build_image_name {$this->workdir}"), ], isDebuggable: true); @@ -292,9 +292,17 @@ private function execute_in_builder(string $command) private function generate_environment_variables($ports) { $environment_variables = collect(); - - foreach ($this->application->runtime_environment_variables as $env) { - $environment_variables->push("$env->key=$env->value"); + ray('Generate Environment Variables'); + if ($this->pull_request_id === 0) { + ray($this->application->runtime_environment_variables); + foreach ($this->application->runtime_environment_variables as $env) { + $environment_variables->push("$env->key=$env->value"); + } + } else { + ray($this->application->runtime_environment_variables_preview); + foreach ($this->application->runtime_environment_variables_preview as $env) { + $environment_variables->push("$env->key=$env->value"); + } } // Add PORT if not exists, use the first port as default if ($environment_variables->filter(fn ($env) => Str::of($env)->contains('PORT'))->isEmpty()) { @@ -305,17 +313,31 @@ private function generate_environment_variables($ports) private function generate_env_variables() { $this->env_args = collect([]); - foreach ($this->application->nixpacks_environment_variables as $env) { - $this->env_args->push("--env {$env->key}={$env->value}"); + if ($this->pull_request_id === 0) { + foreach ($this->application->nixpacks_environment_variables as $env) { + $this->env_args->push("--env {$env->key}={$env->value}"); + } + } else { + foreach ($this->application->nixpacks_environment_variables_preview as $env) { + $this->env_args->push("--env {$env->key}={$env->value}"); + } } + $this->env_args = $this->env_args->implode(' '); } private function generate_build_env_variables() { $this->build_args = collect(["--build-arg SOURCE_COMMIT={$this->git_commit}"]); - foreach ($this->application->build_environment_variables as $env) { - $this->build_args->push("--build-arg {$env->key}={$env->value}"); + if ($this->pull_request_id === 0) { + foreach ($this->application->build_environment_variables as $env) { + $this->build_args->push("--build-arg {$env->key}={$env->value}"); + } + } else { + foreach ($this->application->build_environment_variables_preview as $env) { + $this->build_args->push("--build-arg {$env->key}={$env->value}"); + } } + $this->build_args = $this->build_args->implode(' '); } private function add_build_env_variables_to_dockerfile() @@ -336,15 +358,11 @@ private function add_build_env_variables_to_dockerfile() private function generate_docker_compose() { $ports = $this->application->settings->is_static ? [80] : $this->application->ports_exposes_array; - if ($this->pull_request_id) { - $persistent_storages = []; - $volume_names = []; - $environment_variables = []; - } else { - $persistent_storages = $this->generate_local_persistent_volumes(); - $volume_names = $this->generate_local_persistent_volumes_only_volume_names(); - $environment_variables = $this->generate_environment_variables($ports); - } + + $persistent_storages = $this->generate_local_persistent_volumes(); + $volume_names = $this->generate_local_persistent_volumes_only_volume_names(); + $environment_variables = $this->generate_environment_variables($ports); + $docker_compose = [ 'version' => '3.8', 'services' => [ @@ -385,7 +403,7 @@ private function generate_docker_compose() ] ] ]; - if (count($this->application->ports_mappings_array) > 0 && !$this->pull_request_id) { + if (count($this->application->ports_mappings_array) > 0 && $this->pull_request_id === 0) { $docker_compose['services'][$this->container_name]['ports'] = $this->application->ports_mappings_array; } if (count($persistent_storages) > 0) { @@ -400,8 +418,12 @@ private function generate_local_persistent_volumes() { foreach ($this->application->persistentStorages as $persistentStorage) { $volume_name = $persistentStorage->host_path ?? $persistentStorage->name; + if ($this->pull_request_id !== 0) { + $volume_name = $volume_name . '-pr-' . $this->pull_request_id; + } $local_persistent_volumes[] = $volume_name . ':' . $persistentStorage->mount_path; } + ray('local_persistent_volumes', $local_persistent_volumes); return $local_persistent_volumes ?? []; } @@ -411,8 +433,14 @@ private function generate_local_persistent_volumes_only_volume_names() if ($persistentStorage->host_path) { continue; } - $local_persistent_volumes_names[$persistentStorage->name] = [ - 'name' => $persistentStorage->name, + $name = $persistentStorage->name; + + if ($this->pull_request_id !== 0) { + $name = $name . '-pr-' . $this->pull_request_id; + } + + $local_persistent_volumes_names[$name] = [ + 'name' => $name, 'external' => false, ]; } @@ -443,11 +471,11 @@ private function set_labels_for_applications() $labels[] = 'coolify.applicationId=' . $this->application->id; $labels[] = 'coolify.type=application'; $labels[] = 'coolify.name=' . $this->application->name; - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { $labels[] = 'coolify.pullRequestId=' . $this->pull_request_id; } if ($this->application->fqdn) { - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { $preview_fqdn = data_get($this->preview, 'fqdn'); $template = $this->application->preview_url_template; $url = Url::fromString($this->application->fqdn); @@ -566,7 +594,7 @@ private function set_git_import_settings($git_clone_command) private function importing_git_repository() { $git_clone_command = "git clone -q -b {$this->application->git_branch}"; - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { $pr_branch_name = "pr-{$this->pull_request_id}-coolify"; } @@ -583,7 +611,7 @@ private function importing_git_repository() $commands = [$this->execute_in_builder($git_clone_command)]; - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { $commands[] = $this->execute_in_builder("cd {$this->workdir} && git fetch origin pull/{$this->pull_request_id}/head:$pr_branch_name >/dev/null 2>&1 && git checkout $pr_branch_name >/dev/null 2>&1"); } return $commands; @@ -592,7 +620,7 @@ private function importing_git_repository() $commands = [ $this->execute_in_builder("git clone -q -b {$this->application->git_branch} $source_html_url_scheme://x-access-token:$github_access_token@$source_html_url_host/{$this->application->git_repository}.git {$this->workdir}") ]; - if ($this->pull_request_id) { + if ($this->pull_request_id !== 0) { $commands[] = $this->execute_in_builder("cd {$this->workdir} && git fetch origin pull/{$this->pull_request_id}/head:$pr_branch_name && git checkout $pr_branch_name"); } return $commands; diff --git a/app/Models/Application.php b/app/Models/Application.php index da41e4056..2b0fc8c36 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -99,21 +99,39 @@ public function portsExposesArray(): Attribute : explode(',', $this->ports_exposes) ); } + // Normal Deployments public function environment_variables(): HasMany { - return $this->hasMany(EnvironmentVariable::class); + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false); } public function runtime_environment_variables(): HasMany { - return $this->hasMany(EnvironmentVariable::class)->where('key', 'not like', 'NIXPACKS_%'); + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false)->where('key', 'not like', 'NIXPACKS_%'); } public function build_environment_variables(): HasMany { - return $this->hasMany(EnvironmentVariable::class)->where('is_build_time', true)->where('key', 'not like', 'NIXPACKS_%'); + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false)->where('is_build_time', true)->where('key', 'not like', 'NIXPACKS_%'); } public function nixpacks_environment_variables(): HasMany { - return $this->hasMany(EnvironmentVariable::class)->where('key', 'like', 'NIXPACKS_%'); + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false)->where('key', 'like', 'NIXPACKS_%'); + } + // Preview Deployments + public function environment_variables_preview(): HasMany + { + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true); + } + public function runtime_environment_variables_preview(): HasMany + { + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true)->where('key', 'not like', 'NIXPACKS_%'); + } + public function build_environment_variables_preview(): HasMany + { + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true)->where('is_build_time', true)->where('key', 'not like', 'NIXPACKS_%'); + } + public function nixpacks_environment_variables_preview(): HasMany + { + return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true)->where('key', 'like', 'NIXPACKS_%'); } public function private_key() { diff --git a/app/Models/EnvironmentVariable.php b/app/Models/EnvironmentVariable.php index 807cadb34..3847e1700 100644 --- a/app/Models/EnvironmentVariable.php +++ b/app/Models/EnvironmentVariable.php @@ -2,13 +2,28 @@ namespace App\Models; +use App\Models\EnvironmentVariable as ModelsEnvironmentVariable; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class EnvironmentVariable extends Model { - protected $fillable = ['key', 'value', 'is_build_time', 'application_id']; + protected static function booted() + { + static::created(function ($environment_variable) { + if (!$environment_variable->is_preview) { + ModelsEnvironmentVariable::create([ + 'key' => $environment_variable->key, + 'value' => $environment_variable->value, + 'is_build_time' => $environment_variable->is_build_time, + 'application_id' => $environment_variable->application_id, + 'is_preview' => true, + ]); + } + }); + } + protected $fillable = ['key', 'value', 'is_build_time', 'application_id', 'is_preview']; protected $casts = [ "key" => 'string', 'value' => 'encrypted', diff --git a/database/migrations/2023_05_04_194548_create_environment_variables_table.php b/database/migrations/2023_05_04_194548_create_environment_variables_table.php index 758e74227..4a03ead55 100644 --- a/database/migrations/2023_05_04_194548_create_environment_variables_table.php +++ b/database/migrations/2023_05_04_194548_create_environment_variables_table.php @@ -17,14 +17,15 @@ public function up(): void $table->string('key'); $table->string('value')->nullable(); $table->boolean('is_build_time')->default(false); + $table->boolean('is_preview')->default(false); $table->foreignId('application_id')->nullable(); $table->foreignId('service_id')->nullable(); $table->foreignId('database_id')->nullable(); - $table->unique(['key', 'application_id', 'is_build_time']); - $table->unique(['key', 'service_id', 'is_build_time']); - $table->unique(['key', 'database_id', 'is_build_time']); + $table->unique(['key', 'application_id', 'is_build_time', 'is_preview']); + $table->unique(['key', 'service_id', 'is_build_time', 'is_preview']); + $table->unique(['key', 'database_id', 'is_build_time', 'is_preview']); $table->timestamps(); }); } diff --git a/package-lock.json b/package-lock.json index bbeb9a0bc..3c31ddffc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "dependencies": { "@tailwindcss/typography": "0.5.9", "alpinejs": "3.12.2", - "daisyui": "3.0.0", + "daisyui": "3.0.3", "tailwindcss-scrollbar": "0.1.0" }, "devDependencies": { @@ -941,9 +941,9 @@ "dev": true }, "node_modules/daisyui": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.0.0.tgz", - "integrity": "sha512-EuNK9JQd5yrPLDynAPQkG/29vjZXFWhBK4HXvM83d9oJU0EmF35UNLLs0cslBFfLK4b+bOuhgoYPJ4BjytOxNQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.0.3.tgz", + "integrity": "sha512-RSbXsEBj2LonvjOKEI0I64F5xFJrFrthPgxRNeAZKmACQ3NoIoP45lO6UXLW3bm8PVOUGpKf1Br2SWwc1NqnHQ==", "dependencies": { "colord": "^2.9", "css-selector-tokenizer": "^0.8", diff --git a/package.json b/package.json index a31243014..2884c7466 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "dependencies": { "@tailwindcss/typography": "0.5.9", "alpinejs": "3.12.2", - "daisyui": "3.0.0", + "daisyui": "3.0.3", "tailwindcss-scrollbar": "0.1.0" } } \ No newline at end of file diff --git a/resources/css/app.css b/resources/css/app.css index 69b7bffe0..10ca8377e 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -14,14 +14,14 @@ body { @apply scrollbar min-h-screen bg-coolgray-100 text-neutral-400 antialiased ; } main { - @apply px-32 xl:px-14 mx-auto max-w-screen-xl; + @apply px-32 xl:px-14 mx-auto max-w-screen-xl pt-10; } input[type="checkbox"] { @apply toggle toggle-warning toggle-xs rounded; } input { - @apply input input-sm placeholder:text-neutral-700 text-white rounded-none; + @apply input input-sm h-7 outline-none placeholder:text-neutral-700 text-white rounded-none; } input[type="text"],[type="number"],[type="email"],[type="password"] { @apply read-only:opacity-40; @@ -34,7 +34,7 @@ textarea { @apply textarea placeholder:text-neutral-700 text-white rounded-none; } select { - @apply select select-sm disabled:opacity-40 font-normal placeholder:text-neutral-700 text-white rounded-none; + @apply select select-sm disabled:bg-coolgray-200 border-none disabled:opacity-50 font-normal placeholder:text-neutral-700 text-white rounded-none; } .breadcrumbs > ul > li::before { @apply text-warning opacity-100; @@ -47,7 +47,7 @@ button[type="button"] { @apply hover:bg-coolgray-400 btn h-7 btn-xs border-none bg-coolgray-200 no-animation normal-case text-white rounded; } button[type="submit"] { - @apply btn btn-xs no-animation h-7 normal-case text-white btn-primary rounded; + @apply hover:bg-coolgray-400 btn h-7 btn-xs border-none bg-coolgray-200 no-animation normal-case text-white rounded; } button[isWarning] { @apply bg-error; diff --git a/resources/views/components/applications/navbar.blade.php b/resources/views/components/applications/navbar.blade.php index fd6ba61e7..82615b657 100644 --- a/resources/views/components/applications/navbar.blade.php +++ b/resources/views/components/applications/navbar.blade.php @@ -15,23 +15,32 @@ ]) }}"> -
-