format files lol

This commit is contained in:
Andras Bacsai 2023-08-11 20:19:42 +02:00
parent 054bebb081
commit c762195c8a
141 changed files with 1305 additions and 1307 deletions

View File

@ -4,7 +4,7 @@ use App\Jobs\ApplicationDeploymentJob;
use App\Models\Application; use App\Models\Application;
use App\Models\ApplicationDeploymentQueue; use App\Models\ApplicationDeploymentQueue;
function queue_application_deployment(int $application_id, string $deployment_uuid, int|null $pull_request_id = 0, string $commit = 'HEAD', bool $force_rebuild = false, bool $is_webhook = false) function queue_application_deployment(int $application_id, string $deployment_uuid, int | null $pull_request_id = 0, string $commit = 'HEAD', bool $force_rebuild = false, bool $is_webhook = false)
{ {
$deployment = ApplicationDeploymentQueue::create([ $deployment = ApplicationDeploymentQueue::create([
'application_id' => $application_id, 'application_id' => $application_id,

View File

@ -33,7 +33,7 @@ function create_standalone_postgresql($environment_id, $destination_uuid): Stand
* @param Server $server * @param Server $server
* @return void * @return void
*/ */
function delete_backup_locally(string|null $filename, Server $server): void function delete_backup_locally(string | null $filename, Server $server): void
{ {
if (empty($filename)) { if (empty($filename)) {
return; return;

View File

@ -3,13 +3,13 @@
<div> <div>
<div class="flex flex-col items-center pb-8"> <div class="flex flex-col items-center pb-8">
<div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
<x-version/> <x-version />
</div> </div>
<div class="w-96"> <div class="w-96">
<form action="/user/confirm-password" method="POST" class="flex flex-col gap-2"> <form action="/user/confirm-password" method="POST" class="flex flex-col gap-2">
@csrf @csrf
<x-forms.input required type="password" name="password " label="{{ __('input.password') }}" <x-forms.input required type="password" name="password " label="{{ __('input.password') }}"
autofocus/> autofocus />
<x-forms.button type="submit">{{ __('auth.confirm_password') }}</x-forms.button> <x-forms.button type="submit">{{ __('auth.confirm_password') }}</x-forms.button>
</form> </form>
@if ($errors->any()) @if ($errors->any())

View File

@ -5,7 +5,7 @@
<a href="{{ route('dashboard') }}"> <a href="{{ route('dashboard') }}">
<div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
</a> </a>
<x-version/> <x-version />
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
@ -16,7 +16,7 @@
<form action="/forgot-password" method="POST" class="flex flex-col gap-2"> <form action="/forgot-password" method="POST" class="flex flex-col gap-2">
@csrf @csrf
<x-forms.input required value="test@example.com" type="email" name="email" <x-forms.input required value="test@example.com" type="email" name="email"
label="{{ __('input.email') }}" autofocus/> label="{{ __('input.email') }}" autofocus />
<x-forms.button type="submit">{{ __('auth.forgot_password_send_email') }}</x-forms.button> <x-forms.button type="submit">{{ __('auth.forgot_password_send_email') }}</x-forms.button>
</form> </form>
@else @else

View File

@ -3,7 +3,7 @@
<div class="w-96 min-w-fit"> <div class="w-96 min-w-fit">
<div class="flex flex-col items-center pb-8"> <div class="flex flex-col items-center pb-8">
<div class="text-5xl font-extrabold tracking-tight text-center text-white">Coolify</div> <div class="text-5xl font-extrabold tracking-tight text-center text-white">Coolify</div>
<x-version/> <x-version />
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<h1>{{ __('auth.login') }}</h1> <h1>{{ __('auth.login') }}</h1>
@ -18,16 +18,16 @@
@csrf @csrf
@env('local') @env('local')
<x-forms.input value="test@example.com" type="email" name="email" <x-forms.input value="test@example.com" type="email" name="email"
label="{{ __('input.email') }}" autofocus/> label="{{ __('input.email') }}" autofocus />
<x-forms.input value="password" type="password" name="password" <x-forms.input value="password" type="password" name="password"
label="{{ __('input.password') }}"/> label="{{ __('input.password') }}" />
<a href="/forgot-password" class="text-xs"> <a href="/forgot-password" class="text-xs">
{{ __('auth.forgot_password') }}? {{ __('auth.forgot_password') }}?
</a> </a>
@else @else
<x-forms.input type="email" name="email" label="{{ __('input.email') }}" autofocus/> <x-forms.input type="email" name="email" label="{{ __('input.email') }}" autofocus />
<x-forms.input type="password" name="password" label="{{ __('input.password') }}"/> <x-forms.input type="password" name="password" label="{{ __('input.password') }}" />
@endenv @endenv
<x-forms.button type="submit">{{ __('auth.login') }}</x-forms.button> <x-forms.button type="submit">{{ __('auth.login') }}</x-forms.button>

View File

@ -3,7 +3,7 @@
<div class="w-1/2"> <div class="w-1/2">
<div class="flex flex-col items-center pb-8"> <div class="flex flex-col items-center pb-8">
<div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
<x-version/> <x-version />
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<h1>{{ __('auth.register') }}</h1> <h1>{{ __('auth.register') }}</h1>
@ -16,22 +16,22 @@
@csrf @csrf
@env('local') @env('local')
<x-forms.input required value="test3 normal user" type="text" name="name" <x-forms.input required value="test3 normal user" type="text" name="name"
label="{{ __('input.name') }}"/> label="{{ __('input.name') }}" />
<x-forms.input required value="test3@example.com" type="email" name="email" <x-forms.input required value="test3@example.com" type="email" name="email"
label="{{ __('input.email') }}"/> label="{{ __('input.email') }}" />
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input required value="password" type="password" name="password" <x-forms.input required value="password" type="password" name="password"
label="{{ __('input.password') }}"/> label="{{ __('input.password') }}" />
<x-forms.input required value="password" type="password" name="password_confirmation" <x-forms.input required value="password" type="password" name="password_confirmation"
label="{{ __('input.password.again') }}"/> label="{{ __('input.password.again') }}" />
</div> </div>
@else @else
<x-forms.input required type="text" name="name" label="{{ __('input.name') }}"/> <x-forms.input required type="text" name="name" label="{{ __('input.name') }}" />
<x-forms.input required type="email" name="email" label="{{ __('input.email') }}"/> <x-forms.input required type="email" name="email" label="{{ __('input.email') }}" />
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input required type="password" name="password" label="{{ __('input.password') }}"/> <x-forms.input required type="password" name="password" label="{{ __('input.password') }}" />
<x-forms.input required type="password" name="password_confirmation" <x-forms.input required type="password" name="password_confirmation"
label="{{ __('input.password.again') }}"/> label="{{ __('input.password.again') }}" />
</div> </div>
@endenv @endenv
<x-forms.button type="submit">{{ __('auth.register') }}</x-forms.button> <x-forms.button type="submit">{{ __('auth.register') }}</x-forms.button>

View File

@ -5,7 +5,7 @@
<a href="{{ route('dashboard') }}"> <a href="{{ route('dashboard') }}">
<div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
</a> </a>
<x-version/> <x-version />
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<h1>{{ __('auth.reset_password') }}</h1> <h1>{{ __('auth.reset_password') }}</h1>
@ -15,12 +15,12 @@
@csrf @csrf
<input hidden id="token" name="token" value="{{ request()->route('token') }}"> <input hidden id="token" name="token" value="{{ request()->route('token') }}">
<input hidden value="{{ request()->query('email') }}" type="email" name="email" <input hidden value="{{ request()->query('email') }}" type="email" name="email"
label="{{ __('input.email') }}"/> label="{{ __('input.email') }}" />
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input required type="password" id="password" name="password" <x-forms.input required type="password" id="password" name="password"
label="{{ __('input.password') }}" autofocus/> label="{{ __('input.password') }}" autofocus />
<x-forms.input required type="password" id="password_confirmation" name="password_confirmation" <x-forms.input required type="password" id="password_confirmation" name="password_confirmation"
label="{{ __('input.password.again') }}"/> label="{{ __('input.password.again') }}" />
</div> </div>
<x-forms.button type="submit">{{ __('auth.reset_password') }}</x-forms.button> <x-forms.button type="submit">{{ __('auth.reset_password') }}</x-forms.button>
</form> </form>

View File

@ -3,7 +3,7 @@
<div> <div>
<div class="flex flex-col items-center pb-8"> <div class="flex flex-col items-center pb-8">
<div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
<x-version/> <x-version />
</div> </div>
<div class="w-96" x-data="{ showRecovery: false }"> <div class="w-96" x-data="{ showRecovery: false }">
<form action="/two-factor-challenge" method="POST" class="flex flex-col gap-2"> <form action="/two-factor-challenge" method="POST" class="flex flex-col gap-2">
@ -11,7 +11,7 @@
<template x-if="!showRecovery"> <template x-if="!showRecovery">
<div> <div>
<x-forms.input required type="number" name="code" label="{{ __('input.code') }}" <x-forms.input required type="number" name="code" label="{{ __('input.code') }}"
autofocus/> autofocus />
<div class="pt-2 text-xs cursor-pointer hover:underline hover:text-white" <div class="pt-2 text-xs cursor-pointer hover:underline hover:text-white"
x-on:click="showRecovery = !showRecovery">Use x-on:click="showRecovery = !showRecovery">Use
Recovery Code Recovery Code
@ -21,7 +21,7 @@
<template x-if="showRecovery"> <template x-if="showRecovery">
<div> <div>
<x-forms.input required type="text" name="recovery_code " <x-forms.input required type="text" name="recovery_code "
label="{{ __('input.recovery_code') }}"/> label="{{ __('input.recovery_code') }}" />
<div class="pt-2 text-xs cursor-pointer hover:underline hover:text-white" <div class="pt-2 text-xs cursor-pointer hover:underline hover:text-white"
x-on:click="showRecovery = !showRecovery">Use x-on:click="showRecovery = !showRecovery">Use
One-Time Code One-Time Code

View File

@ -2,11 +2,11 @@
<h1>Command Center</h1> <h1>Command Center</h1>
<div class="pt-2 pb-10">Execute commands on your servers without leaving the browser.</div> <div class="pt-2 pb-10">Execute commands on your servers without leaving the browser.</div>
@if ($servers->count() > 0) @if ($servers->count() > 0)
<livewire:run-command :servers="$servers"/> <livewire:run-command :servers="$servers" />
@else @else
<div> <div>
<div>No validated servers found.</div> <div>No validated servers found.</div>
<x-use-magic-bar/> <x-use-magic-bar />
</div> </div>
@endif @endif
</x-layout> </x-layout>

View File

@ -1,7 +1,7 @@
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<div class="group"> <div class="group">
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Advanced <label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Advanced
<x-chevron-down/> <x-chevron-down />
</label> </label>
<div class="absolute hidden group-hover:block "> <div class="absolute hidden group-hover:block ">
<ul tabindex="0" <ul tabindex="0"
@ -10,16 +10,16 @@
<li> <li>
<div class="rounded-none hover:bg-coollabs hover:text-white" <div class="rounded-none hover:bg-coollabs hover:text-white"
wire:click='force_deploy_without_cache'> wire:click='force_deploy_without_cache'>
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path <path
d="M12.983 8.978c3.955 -.182 7.017 -1.446 7.017 -2.978c0 -1.657 -3.582 -3 -8 -3c-1.661 0 -3.204 .19 -4.483 .515m-2.783 1.228c-.471 .382 -.734 .808 -.734 1.257c0 1.22 1.944 2.271 4.734 2.74"/> d="M12.983 8.978c3.955 -.182 7.017 -1.446 7.017 -2.978c0 -1.657 -3.582 -3 -8 -3c-1.661 0 -3.204 .19 -4.483 .515m-2.783 1.228c-.471 .382 -.734 .808 -.734 1.257c0 1.22 1.944 2.271 4.734 2.74" />
<path <path
d="M4 6v6c0 1.657 3.582 3 8 3c.986 0 1.93 -.067 2.802 -.19m3.187 -.82c1.251 -.53 2.011 -1.228 2.011 -1.99v-6"/> d="M4 6v6c0 1.657 3.582 3 8 3c.986 0 1.93 -.067 2.802 -.19m3.187 -.82c1.251 -.53 2.011 -1.228 2.011 -1.99v-6" />
<path d="M4 12v6c0 1.657 3.582 3 8 3c3.217 0 5.991 -.712 7.261 -1.74m.739 -3.26v-4"/> <path d="M4 12v6c0 1.657 3.582 3 8 3c3.217 0 5.991 -.712 7.261 -1.74m.739 -3.26v-4" />
<path d="M3 3l18 18"/> <path d="M3 3l18 18" />
</svg> </svg>
Force deploy (without Force deploy (without
cache) cache)
@ -28,17 +28,16 @@
@else @else
<li> <li>
<div class="rounded-none hover:bg-coollabs hover:text-white" wire:click='deploy(true)'> <div class="rounded-none hover:bg-coollabs hover:text-white" wire:click='deploy(true)'>
<svg <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path <path
d="M12.983 8.978c3.955 -.182 7.017 -1.446 7.017 -2.978c0 -1.657 -3.582 -3 -8 -3c-1.661 0 -3.204 .19 -4.483 .515m-2.783 1.228c-.471 .382 -.734 .808 -.734 1.257c0 1.22 1.944 2.271 4.734 2.74"/> d="M12.983 8.978c3.955 -.182 7.017 -1.446 7.017 -2.978c0 -1.657 -3.582 -3 -8 -3c-1.661 0 -3.204 .19 -4.483 .515m-2.783 1.228c-.471 .382 -.734 .808 -.734 1.257c0 1.22 1.944 2.271 4.734 2.74" />
<path <path
d="M4 6v6c0 1.657 3.582 3 8 3c.986 0 1.93 -.067 2.802 -.19m3.187 -.82c1.251 -.53 2.011 -1.228 2.011 -1.99v-6"/> d="M4 6v6c0 1.657 3.582 3 8 3c.986 0 1.93 -.067 2.802 -.19m3.187 -.82c1.251 -.53 2.011 -1.228 2.011 -1.99v-6" />
<path d="M4 12v6c0 1.657 3.582 3 8 3c3.217 0 5.991 -.712 7.261 -1.74m.739 -3.26v-4"/> <path d="M4 12v6c0 1.657 3.582 3 8 3c3.217 0 5.991 -.712 7.261 -1.74m.739 -3.26v-4" />
<path d="M3 3l18 18"/> <path d="M3 3l18 18" />
</svg> </svg>
Force deploy (without Force deploy (without
cache) cache)

View File

@ -1,6 +1,6 @@
<div class="group"> <div class="group">
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Links <label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Links
<x-chevron-down/> <x-chevron-down />
</label> </label>
<div class="absolute hidden group-hover:block"> <div class="absolute hidden group-hover:block">
@ -9,7 +9,7 @@
<a target="_blank" <a target="_blank"
class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs hover:text-white" class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs hover:text-white"
href="{{ $application->gitBranchLocation }}"> href="{{ $application->gitBranchLocation }}">
<x-git-icon git="{{ $application->source?->getMorphClass() }}"/> <x-git-icon git="{{ $application->source?->getMorphClass() }}" />
Git Repository Git Repository
</a> </a>
</li> </li>
@ -21,11 +21,11 @@
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l6 -6"/> <path d="M9 15l6 -6" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464"/> <path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />
<path <path
d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463"/> d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463" />
</svg>{{ $fqdn }} </svg>{{ $fqdn }}
</a> </a>
</li> </li>
@ -40,11 +40,11 @@
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l6 -6"/> <path d="M9 15l6 -6" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464"/> <path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />
<path <path
d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463"/> d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463" />
</svg> </svg>
PR{{ data_get($preview, 'pull_request_id') }} | PR{{ data_get($preview, 'pull_request_id') }} |
{{ data_get($preview, 'fqdn') }} {{ data_get($preview, 'fqdn') }}
@ -62,11 +62,11 @@
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l6 -6"/> <path d="M9 15l6 -6" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464"/> <path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />
<path <path
d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463"/> d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463" />
</svg> </svg>
Port {{ $port }} Port {{ $port }}
</a> </a>
@ -79,11 +79,11 @@
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l6 -6"/> <path d="M9 15l6 -6" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464"/> <path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />
<path <path
d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463"/> d="M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463" />
</svg> </svg>
Port {{ $port }} Port {{ $port }}
</a> </a>

View File

@ -7,9 +7,9 @@
href="{{ route('project.application.deployments', $parameters) }}"> href="{{ route('project.application.deployments', $parameters) }}">
<button>Deployments</button> <button>Deployments</button>
</a> </a>
<x-applications.links :application="$application"/> <x-applications.links :application="$application" />
<div class="flex-1"></div> <div class="flex-1"></div>
<x-applications.advanced :application="$application"/> <x-applications.advanced :application="$application" />
@if ($application->status === 'running') @if ($application->status === 'running')
<button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400"> <button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400">
@ -36,8 +36,8 @@
<button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400"> <button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400">
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24" stroke-width="1.5" <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M7 4v16l13 -8z"/> <path d="M7 4v16l13 -8z" />
</svg> </svg>
Deploy Deploy
</button> </button>

View File

@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
fill="none" stroke-linecap="round" stroke-linejoin="round"> fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M6 9l6 6l6 -6"/> <path d="M6 9l6 6l6 -6" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 275 B

After

Width:  |  Height:  |  Size: 276 B

View File

@ -26,8 +26,8 @@
class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400"> class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400">
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24" stroke-width="1.5" <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M7 4v16l13 -8z"/> <path d="M7 4v16l13 -8z" />
</svg> </svg>
Start Start
</button> </button>

View File

@ -12,8 +12,7 @@
@if ($attributes->get('type') === 'submit') @if ($attributes->get('type') === 'submit')
<span wire:target="submit" wire:loading.delay class="loading loading-xs text-warning loading-spinner"></span> <span wire:target="submit" wire:loading.delay class="loading loading-xs text-warning loading-spinner"></span>
@else @else
<span wire:target="{{ explode('(', $attributes->whereStartsWith('wire:click')->first())[0] }}" <span wire:target="{{ explode('(', $attributes->whereStartsWith('wire:click')->first())[0] }}" wire:loading.delay
wire:loading.delay
class="loading loading-xs loading-spinner"></span> class="loading loading-xs loading-spinner"></span>
@endif @endif
</button> </button>

View File

@ -5,7 +5,7 @@
<span class="text-warning">*</span> <span class="text-warning">*</span>
@endif @endif
@if ($helper) @if ($helper)
<x-helper :helper="$helper"/> <x-helper :helper="$helper" />
@endif @endif
</label> </label>
@endif @endif
@ -16,29 +16,26 @@
class="absolute inset-y-0 left-0 flex items-center pl-2 cursor-pointer hover:text-white"> class="absolute inset-y-0 left-0 flex items-center pl-2 cursor-pointer hover:text-white">
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/> <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path d="M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"/> <path d="M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6" />
</svg> </svg>
</div> </div>
@endif @endif
<input {{ $attributes->merge(['class' => $defaultClass . ' pl-10']) }} @required($required) <input {{ $attributes->merge(['class' => $defaultClass . ' pl-10']) }} @required($required)
wire:model.defer={{ $id }} wire:dirty.class.remove='text-white' wire:model.defer={{ $id }} wire:dirty.class.remove='text-white'
wire:dirty.class="input-warning" wire:loading.attr="disabled" type="{{ $type }}" wire:dirty.class="input-warning" wire:loading.attr="disabled" type="{{ $type }}"
@readonly($readonly) @readonly($readonly) @disabled($disabled) id="{{ $id }}" name="{{ $name }}">
@disabled($disabled) id="{{ $id }}"
name="{{ $name }}">
</div> </div>
@else @else
<input <input {{ $attributes->merge(['class' => $defaultClass]) }} @required($required) @readonly($readonly)
{{ $attributes->merge(['class' => $defaultClass]) }} @required($required) @readonly($readonly) wire:model.defer={{ $id }} wire:dirty.class.remove='text-white' wire:dirty.class="input-warning"
wire:model.defer={{ $id }} wire:dirty.class.remove='text-white' wire:loading.attr="disabled" type="{{ $type }}" @disabled($disabled)
wire:dirty.class="input-warning" wire:loading.attr="disabled" type="{{ $type }}" id="{{ $id }}" name="{{ $name }}">
@disabled($disabled) id="{{ $id }}" name="{{ $name }}">
@endif @endif
@if (!$label && $helper) @if (!$label && $helper)
<x-helper :helper="$helper"/> <x-helper :helper="$helper" />
@endif @endif
@error($id) @error($id)
<label class="label"> <label class="label">

View File

@ -5,12 +5,11 @@
<span class="text-warning">*</span> <span class="text-warning">*</span>
@endif @endif
@if ($helper) @if ($helper)
<x-helper :helper="$helper"/> <x-helper :helper="$helper" />
@endif @endif
</label> </label>
@endif @endif
<select <select {{ $attributes->merge(['class' => $defaultClass]) }} @required($required) wire:dirty.class.remove='text-white'
{{ $attributes->merge(['class' => $defaultClass]) }} @required($required) wire:dirty.class.remove='text-white'
wire:dirty.class="text-black bg-warning" wire:loading.attr="disabled" name={{ $id }} wire:dirty.class="text-black bg-warning" wire:loading.attr="disabled" name={{ $id }}
@if ($attributes->whereStartsWith('wire:model')->first()) {{ $attributes->whereStartsWith('wire:model')->first() }} @else wire:model.defer={{ $id }} @endif> @if ($attributes->whereStartsWith('wire:model')->first()) {{ $attributes->whereStartsWith('wire:model')->first() }} @else wire:model.defer={{ $id }} @endif>
{{ $slot }} {{ $slot }}

View File

@ -29,10 +29,10 @@
</span> </span>
</label> </label>
@endif @endif
<textarea placeholder="{{$placeholder}}" <textarea placeholder="{{ $placeholder }}" {{ $attributes->merge(['class' => $defaultClass]) }}
{{ $attributes->merge(['class' => $defaultClass]) }} wire:model.defer={{ $id }} wire:model.defer={{ $id }} @disabled($disabled) @readonly($readonly) @required($required)
@disabled($disabled) @readonly($readonly) @required($required) id="{{ $id }}" name="{{ $name }}" name={{ $id }} id="{{ $id }}" name="{{ $name }}" name={{ $id }} wire:model.defer={{ $value ?? $id }}
wire:model.defer={{ $value ?? $id }} wire:dirty.class="input-warning"></textarea> wire:dirty.class="input-warning"></textarea>
@error($id) @error($id)
<label class="label"> <label class="label">
<span class="text-red-500 label-text-alt">{{ $message }}</span> <span class="text-red-500 label-text-alt">{{ $message }}</span>

View File

@ -5,27 +5,27 @@
@if ($git === 'App\Models\GithubApp') @if ($git === 'App\Models\GithubApp')
<svg xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => 'w-6 h-6']) }} viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => 'w-6 h-6']) }} viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path <path
d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5"/> d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" />
</svg> </svg>
@elseif($git === 'App\Models\GitlabApp') @elseif($git === 'App\Models\GitlabApp')
<svg xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => 'w-6 h-6']) }} viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => 'w-6 h-6']) }} viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M21 14l-9 7l-9 -7l3 -11l3 7h6l3 -7z"/> <path d="M21 14l-9 7l-9 -7l3 -11l3 7h6l3 -7z" />
</svg> </svg>
@else @else
<svg xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => 'w-6 h-6']) }} viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => 'w-6 h-6']) }} viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M16 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/> <path d="M16 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
<path d="M12 8m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/> <path d="M12 8m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
<path d="M12 16m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/> <path d="M12 16m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
<path d="M12 15v-6"/> <path d="M12 15v-6" />
<path d="M15 11l-2 -2"/> <path d="M15 11l-2 -2" />
<path d="M11 7l-1.9 -1.9"/> <path d="M11 7l-1.9 -1.9" />
<path <path
d="M13.446 2.6l7.955 7.954a2.045 2.045 0 0 1 0 2.892l-7.955 7.955a2.045 2.045 0 0 1 -2.892 0l-7.955 -7.955a2.045 2.045 0 0 1 0 -2.892l7.955 -7.955a2.045 2.045 0 0 1 2.892 0z"/> d="M13.446 2.6l7.955 7.954a2.045 2.045 0 0 1 0 2.892l-7.955 7.955a2.045 2.045 0 0 1 -2.892 0l-7.955 -7.955a2.045 2.045 0 0 1 0 -2.892l7.955 -7.955a2.045 2.045 0 0 1 2.892 0z" />
</svg> </svg>
@endif @endif

View File

@ -23,12 +23,12 @@
</head> </head>
<body> <body>
@livewireScripts @livewireScripts
<main> <main>
{{ $slot }} {{ $slot }}
</main> </main>
<x-version class="fixed left-2 bottom-1"/> <x-version class="fixed left-2 bottom-1" />
<script> <script>
function changePasswordFieldType(event) { function changePasswordFieldType(event) {
let element = event.target let element = event.target
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
@ -46,7 +46,7 @@
} }
} }
} }
</script> </script>
</body> </body>
</html> </html>

View File

@ -23,22 +23,22 @@
</head> </head>
<body> <body>
@livewireScripts @livewireScripts
<x-toaster-hub/> <x-toaster-hub />
@if (auth()->user()->isInstanceAdmin()) @if (auth()->user()->isInstanceAdmin())
<div class="fixed top-3 left-4" id="vue"> <div class="fixed top-3 left-4" id="vue">
<magic-bar></magic-bar> <magic-bar></magic-bar>
</div> </div>
<x-navbar/> <x-navbar />
@else @else
<x-navbar-subscription/> <x-navbar-subscription />
@endif @endif
<main class="main max-w-screen-2xl"> <main class="main max-w-screen-2xl">
{{ $slot }} {{ $slot }}
</main> </main>
<x-version class="fixed left-2 bottom-1"/> <x-version class="fixed left-2 bottom-1" />
<script> <script>
function changePasswordFieldType(event) { function changePasswordFieldType(event) {
let element = event.target let element = event.target
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
@ -60,7 +60,7 @@
Livewire.on('reloadWindow', () => { Livewire.on('reloadWindow', () => {
window.location.reload(); window.location.reload();
}) })
</script> </script>
</body> </body>
</html> </html>

View File

@ -8,10 +8,10 @@
<link href="https://api.fonts.coollabs.io/css2?family=Inter&display=swap" rel="stylesheet"> <link href="https://api.fonts.coollabs.io/css2?family=Inter&display=swap" rel="stylesheet">
@env('local') @env('local')
<title>Coolify - localhost</title> <title>Coolify - localhost</title>
<link rel="icon" href="{{ asset('favicon-dev.png') }}" type="image/x-icon"/> <link rel="icon" href="{{ asset('favicon-dev.png') }}" type="image/x-icon" />
@endenv @endenv
@env('production') @env('production')
<link rel="icon" href="{{ asset('favicon.png') }}" type="image/x-icon"/> <link rel="icon" href="{{ asset('favicon.png') }}" type="image/x-icon" />
<title>{{ $title ?? 'Coolify' }}</title> <title>{{ $title ?? 'Coolify' }}</title>
@endenv @endenv
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
@ -25,17 +25,17 @@
</head> </head>
<body> <body>
@livewireScripts @livewireScripts
@auth @auth
<x-toaster-hub/> <x-toaster-hub />
<x-navbar/> <x-navbar />
<div class="fixed top-3 left-4" id="vue"> <div class="fixed top-3 left-4" id="vue">
<magic-bar></magic-bar> <magic-bar></magic-bar>
</div> </div>
<main class="main max-w-screen-2xl"> <main class="main max-w-screen-2xl">
{{ $slot }} {{ $slot }}
</main> </main>
<x-version class="fixed left-2 bottom-1"/> <x-version class="fixed left-2 bottom-1" />
<script> <script>
let checkHealthInterval = null; let checkHealthInterval = null;
let checkIfIamDeadInterval = null; let checkIfIamDeadInterval = null;
@ -118,10 +118,10 @@
if (message) Toaster.success(message) if (message) Toaster.success(message)
}) })
</script> </script>
@endauth @endauth
@guest @guest
{{ $slot }} {{ $slot }}
@endguest @endguest
</body> </body>
</html> </html>

View File

@ -6,7 +6,7 @@
<svg class="w-8 h-8 text-error" fill="none" viewBox="0 0 24 24" stroke-width="1.5" <svg class="w-8 h-8 text-error" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" aria-hidden="true"> stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" <path stroke-linecap="round" stroke-linejoin="round"
d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"/> d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" />
</svg> </svg>
</div> </div>
<div class="flex flex-col w-full gap-2"> <div class="flex flex-col w-full gap-2">

View File

@ -5,14 +5,13 @@
<form action="/logout" method="POST" class=" hover:bg-transparent"> <form action="/logout" method="POST" class=" hover:bg-transparent">
@csrf @csrf
<button class="flex items-center gap-2 rounded-none hover:text-white hover:bg-transparent"> <button class="flex items-center gap-2 rounded-none hover:text-white hover:bg-transparent">
<svg <svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M13 12v.01"/> <path d="M13 12v.01" />
<path d="M3 21h18"/> <path d="M3 21h18" />
<path d="M5 21v-16a2 2 0 0 1 2 -2h7.5m2.5 10.5v7.5"/> <path d="M5 21v-16a2 2 0 0 1 2 -2h7.5m2.5 10.5v7.5" />
<path d="M14 7h7m-3 -3l3 3l-3 3"/> <path d="M14 7h7m-3 -3l3 3l-3 3" />
</svg> </svg>
</button> </button>
</form> </form>

View File

@ -3,11 +3,10 @@
<ul class="flex flex-col h-full gap-4 menu flex-nowrap"> <ul class="flex flex-col h-full gap-4 menu flex-nowrap">
<li title="Dashboard"> <li title="Dashboard">
<a class="hover:bg-transparent" @if (!request()->is('/')) href="/" @endif> <a class="hover:bg-transparent" @if (!request()->is('/')) href="/" @endif>
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg" class="{{ request()->is('/') ? 'text-warning icon' : 'icon' }}"
class="{{ request()->is('/') ? 'text-warning icon' : 'icon' }}"
fill="none" viewBox="0 0 24 24" stroke="currentColor"> fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/> d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg> </svg>
</a> </a>
</li> </li>
@ -17,12 +16,12 @@
class="{{ request()->is('server/*') || request()->is('servers') ? 'text-warning icon' : 'icon' }}" class="{{ request()->is('server/*') || request()->is('servers') ? 'text-warning icon' : 'icon' }}"
viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z"/> <path d="M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z" />
<path d="M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12"/> <path d="M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12" />
<path d="M7 8v.01"/> <path d="M7 8v.01" />
<path d="M7 16v.01"/> <path d="M7 16v.01" />
<path d="M20 15l-2 3h3l-2 3"/> <path d="M20 15l-2 3h3l-2 3" />
</svg> </svg>
</a> </a>
</li> </li>
@ -32,10 +31,10 @@
class="{{ request()->is('project/*') || request()->is('projects') ? 'text-warning icon' : 'icon' }}" class="{{ request()->is('project/*') || request()->is('projects') ? 'text-warning icon' : 'icon' }}"
viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 4l-8 4l8 4l8 -4l-8 -4"/> <path d="M12 4l-8 4l8 4l8 -4l-8 -4" />
<path d="M4 12l8 4l8 -4"/> <path d="M4 12l8 4l8 -4" />
<path d="M4 16l8 4l8 -4"/> <path d="M4 16l8 4l8 -4" />
</svg> </svg>
</a> </a>
</li> </li>
@ -43,16 +42,14 @@
@if (auth()->user()->isInstanceAdmin()) @if (auth()->user()->isInstanceAdmin())
<li title="Command Center"> <li title="Command Center">
<a class="hover:bg-transparent" <a class="hover:bg-transparent" @if (!request()->is('command-center')) href="/command-center" @endif>
@if (!request()->is('command-center')) href="/command-center" @endif>
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg"
class="{{ request()->is('command-center') ? 'text-warning icon' : 'icon' }}" class="{{ request()->is('command-center') ? 'text-warning icon' : 'icon' }}" viewBox="0 0 24 24"
viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M5 7l5 5l-5 5"/> <path d="M5 7l5 5l-5 5" />
<path d="M12 19l7 0"/> <path d="M12 19l7 0" />
</svg> </svg>
</a> </a>
</li> </li>
@ -61,10 +58,10 @@
<a class="hover:bg-transparent" @if (!request()->is('profile')) href="/profile" @endif> <a class="hover:bg-transparent" @if (!request()->is('profile')) href="/profile" @endif>
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5" <svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"/> <path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" />
<path d="M12 10m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"/> <path d="M12 10m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" />
<path d="M6.168 18.849a4 4 0 0 1 3.832 -2.849h4a4 4 0 0 1 3.834 2.855"/> <path d="M6.168 18.849a4 4 0 0 1 3.832 -2.849h4a4 4 0 0 1 3.834 2.855" />
</svg> </svg>
</a> </a>
</li> </li>
@ -72,17 +69,17 @@
<a class="hover:bg-transparent" href="{{ route('team.show') }}"> <a class="hover:bg-transparent" href="{{ route('team.show') }}">
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5" <svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 13a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/> <path d="M10 13a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path d="M8 21v-1a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v1"/> <path d="M8 21v-1a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v1" />
<path d="M15 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/> <path d="M15 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path d="M17 10h2a2 2 0 0 1 2 2v1"/> <path d="M17 10h2a2 2 0 0 1 2 2v1" />
<path d="M5 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/> <path d="M5 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path d="M3 13v-1a2 2 0 0 1 2 -2h2"/> <path d="M3 13v-1a2 2 0 0 1 2 -2h2" />
</svg> </svg>
</a> </a>
</li> </li>
<livewire:upgrade/> <livewire:upgrade />
<div class="flex-1"></div> <div class="flex-1"></div>
<li title="Settings" class="mt-auto"> <li title="Settings" class="mt-auto">
<a class="hover:bg-transparent" @if (!request()->is('settings')) href="/settings" @endif> <a class="hover:bg-transparent" @if (!request()->is('settings')) href="/settings" @endif>
@ -90,10 +87,10 @@
class="{{ request()->is('settings*') ? 'text-warning icon' : 'icon' }}" viewBox="0 0 24 24" class="{{ request()->is('settings*') ? 'text-warning icon' : 'icon' }}" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path <path
d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z"/> d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z" />
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0"/> <path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
</svg> </svg>
</a> </a>
</li> </li>
@ -103,14 +100,13 @@
<form action="/logout" method="POST" class=" hover:bg-transparent"> <form action="/logout" method="POST" class=" hover:bg-transparent">
@csrf @csrf
<button type="submit" class="rounded-none hover:text-white hover:bg-transparent"> <button type="submit" class="rounded-none hover:text-white hover:bg-transparent">
<svg <svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M13 12v.01"/> <path d="M13 12v.01" />
<path d="M3 21h18"/> <path d="M3 21h18" />
<path d="M5 21v-16a2 2 0 0 1 2 -2h7.5m2.5 10.5v7.5"/> <path d="M5 21v-16a2 2 0 0 1 2 -2h7.5m2.5 10.5v7.5" />
<path d="M14 7h7m-3 -3l3 3l-3 3"/> <path d="M14 7h7m-3 -3l3 3l-3 3" />
</svg> </svg>
</button> </button>
</form> </form>

View File

@ -50,7 +50,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Same features as the paid version Same features as the paid version
</li> </li>
@ -59,7 +59,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
You need to take care of everything You need to take care of everything
</li> </li>
@ -68,7 +68,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
If you brave enough, you can do it! If you brave enough, you can do it!
</li> </li>
@ -77,7 +77,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Community Support Community Support
</li> </li>
@ -105,7 +105,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
1 server 1 server
</li> </li>
@ -114,7 +114,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Unlimited Deployments Unlimited Deployments
</li> </li>
@ -123,7 +123,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
30 days of backups 30 days of backups
</li> </li>
@ -132,7 +132,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Basic Support Basic Support
</li> </li>
@ -159,7 +159,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
5 servers 5 servers
</li> </li>
@ -168,7 +168,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Unlimited Deployments Unlimited Deployments
</li> </li>
@ -177,7 +177,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
30 days of backups 30 days of backups
</li> </li>
@ -186,7 +186,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Basic Support Basic Support
</li> </li>
@ -215,7 +215,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Unlimited servers Unlimited servers
</li> </li>
@ -224,7 +224,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Unlimited deployments Unlimited deployments
</li> </li>
@ -233,7 +233,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
30 days of backups 30 days of backups
</li> </li>
@ -242,7 +242,7 @@
aria-hidden="true"> aria-hidden="true">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd"/> clip-rule="evenodd" />
</svg> </svg>
Priority Support Priority Support
</li> </li>

View File

@ -9,7 +9,7 @@
<div class="mt-4"> <div class="mt-4">
<label> <label>
Enable dashboard? Enable dashboard?
<input type="checkbox"/> <input type="checkbox" />
(auto-save) (auto-save)
</label> </label>
</div> </div>
@ -24,7 +24,7 @@
<div class="mt-2"></div> <div class="mt-2"></div>
<label> <label>
<div>Hostname <span class="text-xs"> Eg: dashboard.example.com </span></div> <div>Hostname <span class="text-xs"> Eg: dashboard.example.com </span></div>
<input type="text"/> <input type="text" />
</label> </label>
<button>Update</button> <button>Update</button>
</label> </label>
@ -36,11 +36,11 @@
<div class="mt-2"></div> <div class="mt-2"></div>
<label> <label>
Username Username
<input type="text"/> <input type="text" />
</label> </label>
<label> <label>
Password Password
<input type="password"/> <input type="password" />
</label> </label>
<button>Update</button> <button>Update</button>
</label> </label>

View File

@ -7,8 +7,7 @@
</li> </li>
<li> <li>
<div class="flex items-center"> <div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor" <svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor" viewBox="0 0 20 20"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"> xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" <path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
@ -40,11 +39,11 @@
</div> </div>
</li> </li>
@if ($resource->status === 'running') @if ($resource->status === 'running')
<x-status.running/> <x-status.running />
@elseif($resource->status === 'restarting') @elseif($resource->status === 'restarting')
<x-status.restarting/> <x-status.restarting />
@else @else
<x-status.stopped/> <x-status.stopped />
@endif @endif
</ol> </ol>
</nav> </nav>

View File

@ -1,7 +1,7 @@
<div class="pb-6"> <div class="pb-6">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<h1>Server</h1> <h1>Server</h1>
<livewire:server.proxy.status :server="$server"/> <livewire:server.proxy.status :server="$server" />
</div> </div>
<div class="pt-2 pb-10 ">{{ data_get($server, 'name') }}</div> <div class="pt-2 pb-10 ">{{ data_get($server, 'name') }}</div>
<nav class="navbar-main"> <nav class="navbar-main">
@ -30,6 +30,6 @@
<button>Destinations</button> <button>Destinations</button>
</a> </a>
<div class="flex-1"></div> <div class="flex-1"></div>
<livewire:server.proxy.deploy :server="$server"/> <livewire:server.proxy.deploy :server="$server" />
</nav> </nav>
</div> </div>

View File

@ -1,7 +1,7 @@
@props([ @props([
'text' => 'Stopped', 'text' => 'Stopped',
]) ])
<x-loading wire:loading.delay/> <x-loading wire:loading.delay />
<div class="flex items-center gap-2" wire:loading.remove.delay.longer> <div class="flex items-center gap-2" wire:loading.remove.delay.longer>
<div class="badge badge-error badge-xs"></div> <div class="badge badge-error badge-xs"></div>
<div class="text-xs font-medium tracking-wide text-error">{{ $text }}</div> <div class="text-xs font-medium tracking-wide text-error">{{ $text }}</div>

View File

@ -1,7 +1,7 @@
@props([ @props([
'text' => 'Running', 'text' => 'Running',
]) ])
<x-loading wire:loading.delay.longer/> <x-loading wire:loading.delay.longer />
<div class="flex items-center gap-2 " wire:loading.remove.delay.longer> <div class="flex items-center gap-2 " wire:loading.remove.delay.longer>
<div class="badge badge-success badge-xs"></div> <div class="badge badge-success badge-xs"></div>
<div class="text-xs font-medium tracking-wide text-success">{{ $text }}</div> <div class="text-xs font-medium tracking-wide text-success">{{ $text }}</div>

View File

@ -1,7 +1,7 @@
@props([ @props([
'text' => 'Stopped', 'text' => 'Stopped',
]) ])
<x-loading wire:loading.delay.longer/> <x-loading wire:loading.delay.longer />
<div class="flex items-center gap-2 " wire:loading.remove.delay.longer> <div class="flex items-center gap-2 " wire:loading.remove.delay.longer>
<div class="badge badge-error badge-xs"></div> <div class="badge badge-error badge-xs"></div>
<div class="text-xs font-medium tracking-wide text-error">{{ $text }}</div> <div class="text-xs font-medium tracking-wide text-error">{{ $text }}</div>

View File

@ -37,7 +37,7 @@
</a> </a>
<div class="flex-1"></div> <div class="flex-1"></div>
<div class="-mt-9"> <div class="-mt-9">
<livewire:switch-team/> <livewire:switch-team />
</div> </div>
</nav> </nav>
</div> </div>

View File

@ -2,8 +2,7 @@
@if (isset($link)) @if (isset($link))
Use the magic Use the magic
bar (press <span class="kbd-custom">/</span>) to create a new one or bar (press <span class="kbd-custom">/</span>) to create a new one or
<a href="{{ $link }}" <a href="{{ $link }}" class="underline text-warning">
class="underline text-warning">
click here click here
</a>. </a>.
@else @else

View File

@ -23,7 +23,7 @@
</div> </div>
</div> </div>
@if (is_dev()) @if (is_dev())
<livewire:dev.s3-test/> <livewire:dev.s3-test />
<livewire:dev.scheduled-backups/> <livewire:dev.scheduled-backups />
@endif @endif
</x-layout> </x-layout>

View File

@ -1,7 +1,7 @@
<x-layout> <x-layout>
<h1>Destinations</h1> <h1>Destinations</h1>
<div class="pt-2 pb-10 ">All Destinations</div> <div class="pt-2 pb-10 ">All Destinations</div>
<div class="grid lg:grid-cols-2 gap-2"> <div class="grid gap-2 lg:grid-cols-2">
@forelse ($destinations as $destination) @forelse ($destinations as $destination)
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker') @if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
<a class="flex gap-4 text-center hover:no-underline box group" <a class="flex gap-4 text-center hover:no-underline box group"
@ -23,7 +23,7 @@
@empty @empty
<div> <div>
<div>No destinations found.</div> <div>No destinations found.</div>
<x-use-magic-bar/> <x-use-magic-bar />
</div> </div>
@endforelse @endforelse
</div> </div>

View File

@ -1,3 +1,3 @@
<x-layout> <x-layout>
<livewire:destination.new.standalone-docker :servers="$servers" :server_id="$server_id"/> <livewire:destination.new.standalone-docker :servers="$servers" :server_id="$server_id" />
</x-layout> </x-layout>

View File

@ -1,3 +1,3 @@
<x-layout> <x-layout>
<livewire:destination.form :destination="$destination"/> <livewire:destination.form :destination="$destination" />
</x-layout> </x-layout>

View File

@ -13,7 +13,7 @@
</a> </a>
<a target="_blank" class="text-xs" href="https://docs.coollabs.io/contact.html">Contact <a target="_blank" class="text-xs" href="https://docs.coollabs.io/contact.html">Contact
support support
<x-external-link/> <x-external-link />
</a> </a>
</div> </div>
</div> </div>

View File

@ -11,7 +11,7 @@
<a href="/" <a href="/"
class="rounded-md bg-coollabs px-3.5 py-2.5 font-semibold text-white shadow-sm hover:bg-coollabs-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 hover:no-underline">Go class="rounded-md bg-coollabs px-3.5 py-2.5 font-semibold text-white shadow-sm hover:bg-coollabs-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 hover:no-underline">Go
back home</a> back home</a>
<a href="https://docs.coollabs.io/contact.html" class=" font-semibold text-white">Contact <a href="https://docs.coollabs.io/contact.html" class="font-semibold text-white ">Contact
support support
<span aria-hidden="true">&rarr;</span></a> <span aria-hidden="true">&rarr;</span></a>
</div> </div>

View File

@ -45,13 +45,13 @@
</head> </head>
<body> <body>
<div class="flex-center position-ref full-height"> <div class="flex-center position-ref full-height">
<div class="content"> <div class="content">
<div class="title"> <div class="title">
@yield('message') @yield('message')
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
@ -35,7 +36,9 @@
line-height: 1.5 line-height: 1.5
} }
*, :after, :before { *,
:after,
:before {
box-sizing: border-box; box-sizing: border-box;
border: 0 solid #e2e8f0 border: 0 solid #e2e8f0
} }
@ -49,7 +52,8 @@
font-family: Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace font-family: Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace
} }
svg, video { svg,
video {
display: block; display: block;
vertical-align: middle vertical-align: middle
} }
@ -315,13 +319,14 @@
} }
.grid-cols-1 { .grid-cols-1 {
grid-template-columns:repeat(1, minmax(0, 1fr)) grid-template-columns: repeat(1, minmax(0, 1fr))
} }
@-webkit-keyframes spin { @-webkit-keyframes spin {
0% { 0% {
transform: rotate(0deg) transform: rotate(0deg)
} }
to { to {
transform: rotate(1turn) transform: rotate(1turn)
} }
@ -331,6 +336,7 @@
0% { 0% {
transform: rotate(0deg) transform: rotate(0deg)
} }
to { to {
transform: rotate(1turn) transform: rotate(1turn)
} }
@ -341,7 +347,9 @@
transform: scale(1); transform: scale(1);
opacity: 1 opacity: 1
} }
75%, to {
75%,
to {
transform: scale(2); transform: scale(2);
opacity: 0 opacity: 0
} }
@ -352,36 +360,47 @@
transform: scale(1); transform: scale(1);
opacity: 1 opacity: 1
} }
75%, to {
75%,
to {
transform: scale(2); transform: scale(2);
opacity: 0 opacity: 0
} }
} }
@-webkit-keyframes pulse { @-webkit-keyframes pulse {
0%, to {
0%,
to {
opacity: 1 opacity: 1
} }
50% { 50% {
opacity: .5 opacity: .5
} }
} }
@keyframes pulse { @keyframes pulse {
0%, to {
0%,
to {
opacity: 1 opacity: 1
} }
50% { 50% {
opacity: .5 opacity: .5
} }
} }
@-webkit-keyframes bounce { @-webkit-keyframes bounce {
0%, to {
0%,
to {
transform: translateY(-25%); transform: translateY(-25%);
-webkit-animation-timing-function: cubic-bezier(.8, 0, 1, 1); -webkit-animation-timing-function: cubic-bezier(.8, 0, 1, 1);
animation-timing-function: cubic-bezier(.8, 0, 1, 1) animation-timing-function: cubic-bezier(.8, 0, 1, 1)
} }
50% { 50% {
transform: translateY(0); transform: translateY(0);
-webkit-animation-timing-function: cubic-bezier(0, 0, .2, 1); -webkit-animation-timing-function: cubic-bezier(0, 0, .2, 1);
@ -390,11 +409,14 @@
} }
@keyframes bounce { @keyframes bounce {
0%, to {
0%,
to {
transform: translateY(-25%); transform: translateY(-25%);
-webkit-animation-timing-function: cubic-bezier(.8, 0, 1, 1); -webkit-animation-timing-function: cubic-bezier(.8, 0, 1, 1);
animation-timing-function: cubic-bezier(.8, 0, 1, 1) animation-timing-function: cubic-bezier(.8, 0, 1, 1)
} }
50% { 50% {
transform: translateY(0); transform: translateY(0);
-webkit-animation-timing-function: cubic-bezier(0, 0, .2, 1); -webkit-animation-timing-function: cubic-bezier(0, 0, .2, 1);
@ -459,7 +481,7 @@
} }
.md\:grid-cols-2 { .md\:grid-cols-2 {
grid-template-columns:repeat(2, minmax(0, 1fr)) grid-template-columns: repeat(2, minmax(0, 1fr))
} }
} }
@ -509,19 +531,22 @@
} }
</style> </style>
</head> </head>
<body class="antialiased"> <body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center sm:pt-0"> <div
class="relative flex justify-center min-h-screen bg-gray-100 items-top dark:bg-gray-900 sm:items-center sm:pt-0">
<div class="max-w-xl mx-auto sm:px-6 lg:px-8"> <div class="max-w-xl mx-auto sm:px-6 lg:px-8">
<div class="flex items-center pt-8 sm:justify-start sm:pt-0"> <div class="flex items-center pt-8 sm:justify-start sm:pt-0">
<div class="px-4 text-lg text-gray-500 border-r border-gray-400 tracking-wider"> <div class="px-4 text-lg tracking-wider text-gray-500 border-r border-gray-400">
@yield('code') @yield('code')
</div> </div>
<div class="ml-4 text-lg text-gray-500 uppercase tracking-wider"> <div class="ml-4 text-lg tracking-wider text-gray-500 uppercase">
@yield('message') @yield('message')
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -3,17 +3,16 @@
@if ($this->activity) @if ($this->activity)
@if (isset($header)) @if (isset($header))
<div class="flex gap-2 pb-2"> <div class="flex gap-2 pb-2">
<h2>{{$header}}</h2> <h2>{{ $header }}</h2>
@if ($isPollingActive) @if ($isPollingActive)
<x-loading/> <x-loading />
@endif @endif
</div> </div>
@endif @endif
<div <div
class="scrollbar flex flex-col-reverse w-full overflow-y-auto border border-solid rounded border-coolgray-300 max-h-[32rem] p-4 text-xs text-white"> class="scrollbar flex flex-col-reverse w-full overflow-y-auto border border-solid rounded border-coolgray-300 max-h-[32rem] p-4 text-xs text-white">
<pre class="font-mono whitespace-pre-wrap" <pre class="font-mono whitespace-pre-wrap" @if ($isPollingActive) wire:poll.2000ms="polling" @endif>{{ RunRemoteProcess::decodeOutput($this->activity) }}</pre>
@if ($isPollingActive) wire:poll.2000ms="polling" @endif>{{ RunRemoteProcess::decodeOutput($this->activity) }}</pre>
</div> </div>
@endif @endif
</div> </div>

View File

@ -7,10 +7,9 @@
@endif @endif
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input type="password" id="settings.resale_license" <x-forms.input type="password" id="settings.resale_license" placeholder="eg: BE558E91-0CC5-4AA2-B1C0-B6403C2988DD"
placeholder="eg: BE558E91-0CC5-4AA2-B1C0-B6403C2988DD" label="License Key" />
label="License Key"/> <x-forms.input type="password" id="instance_id" label="Instance Id (do not change this)" disabled />
<x-forms.input type="password" id="instance_id" label="Instance Id (do not change this)" disabled/>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.button type="submit"> <x-forms.button type="submit">

View File

@ -23,10 +23,10 @@
<div class="pt-2 pb-10 ">Your swarm docker network. WIP</div> <div class="pt-2 pb-10 ">Your swarm docker network. WIP</div>
@endif @endif
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="destination.name" label="Name"/> <x-forms.input id="destination.name" label="Name" />
<x-forms.input id="destination.server.ip" label="Server IP" readonly/> <x-forms.input id="destination.server.ip" label="Server IP" readonly />
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker') @if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
<x-forms.input id="destination.network" label="Docker Network" readonly/> <x-forms.input id="destination.network" label="Docker Network" readonly />
@endif @endif
</div> </div>
</form> </form>

View File

@ -3,8 +3,8 @@
<div class="pt-2 pb-10 ">Destinations are used to segregate resources by network.</div> <div class="pt-2 pb-10 ">Destinations are used to segregate resources by network.</div>
<form class="flex flex-col gap-4" wire:submit.prevent='submit'> <form class="flex flex-col gap-4" wire:submit.prevent='submit'>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="name" label="Name" required/> <x-forms.input id="name" label="Name" required />
<x-forms.input id="network" label="Network" required/> <x-forms.input id="network" label="Network" required />
</div> </div>
<x-forms.select id="server_id" label="Select a server" required wire:change="generate_name"> <x-forms.select id="server_id" label="Select a server" required wire:change="generate_name">
<option disabled>Select a server</option> <option disabled>Select a server</option>

View File

@ -1,13 +1,13 @@
<div> <div>
<h2>Scheduled Databse Backups</h2> <h2>Scheduled Databse Backups</h2>
@foreach($scheduledDatabaseBackup as $backup) @foreach ($scheduledDatabaseBackup as $backup)
<div> <div>
{{$backup->id}} {{ $backup->id }}
{{$backup->database->id}} {{ $backup->database->id }}
{{$backup->frequency}} {{ $backup->frequency }}
{{$backup->database->type()}} {{ $backup->database->type() }}
{{$backup->created_at}} {{ $backup->created_at }}
{{$backup->updated_at}} {{ $backup->updated_at }}
</div> </div>
@endforeach @endforeach
</div> </div>

View File

@ -13,28 +13,27 @@
@endif @endif
</div> </div>
<div class="w-48"> <div class="w-48">
<x-forms.checkbox instantSave id="model.discord_enabled" label="Notification Enabled"/> <x-forms.checkbox instantSave id="model.discord_enabled" label="Notification Enabled" />
</div> </div>
<x-forms.input type="password" <x-forms.input type="password"
helper="Generate a webhook in Discord.<br>Example: https://discord.com/api/webhooks/...." helper="Generate a webhook in Discord.<br>Example: https://discord.com/api/webhooks/...." required
required id="model.discord_webhook_url" label="Webhook" />
id="model.discord_webhook_url" label="Webhook"/>
</form> </form>
@if (data_get($model, 'discord_enabled')) @if (data_get($model, 'discord_enabled'))
<h3 class="mt-4">Subscribe to events</h3> <h3 class="mt-4">Subscribe to events</h3>
<div class="w-64"> <div class="w-64">
@if (is_dev()) @if (is_dev())
<x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_test" label="Test"/> <x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_test" label="Test" />
@endif @endif
<h4 class="mt-4">General</h4> <h4 class="mt-4">General</h4>
<x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_status_changes" <x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_status_changes"
label="Container Status Changes"/> label="Container Status Changes" />
<h4 class="mt-4">Applications</h4> <h4 class="mt-4">Applications</h4>
<x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_deployments" <x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_deployments"
label="Deployments"/> label="Deployments" />
<h4 class="mt-4">Databases</h4> <h4 class="mt-4">Databases</h4>
<x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_database_backups" <x-forms.checkbox instantSave="saveModel" id="model.discord_notifications_database_backups"
label="Backup Statuses"/> label="Backup Statuses" />
</div> </div>
@endif @endif
</div> </div>

View File

@ -1,7 +1,7 @@
<div> <div>
<dialog id="sendTestEmail" class="modal"> <dialog id="sendTestEmail" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'>
<x-forms.input placeholder="test@example.com" id="emails" label="Recepients" required/> <x-forms.input placeholder="test@example.com" id="emails" label="Recepients" required />
<x-forms.button onclick="sendTestEmail.close()" wire:click="sendTestNotification"> <x-forms.button onclick="sendTestEmail.close()" wire:click="sendTestNotification">
Send Email Send Email
</x-forms.button> </x-forms.button>
@ -29,31 +29,30 @@
@endif @endif
</div> </div>
<div class="w-48"> <div class="w-48">
<x-forms.checkbox instantSave id="model.smtp_enabled" label="Notification Enabled"/> <x-forms.checkbox instantSave id="model.smtp_enabled" label="Notification Enabled" />
</div> </div>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
<x-forms.input id="model.smtp_recipients" <x-forms.input id="model.smtp_recipients"
placeholder="If empty, all users will be notified in the team." placeholder="If empty, all users will be notified in the team."
helper="Email list to send the all notifications to, separated by comma." helper="Email list to send the all notifications to, separated by comma." label="Recipients" />
label="Recipients"/>
</div> </div>
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
<x-forms.input required id="model.smtp_host" helper="SMTP Hostname" placeholder="smtp.mailgun.org" <x-forms.input required id="model.smtp_host" helper="SMTP Hostname" placeholder="smtp.mailgun.org"
label="Host"/> label="Host" />
<x-forms.input required id="model.smtp_port" helper="SMTP Port" placeholder="587" label="Port"/> <x-forms.input required id="model.smtp_port" helper="SMTP Port" placeholder="587" label="Port" />
<x-forms.input helper="If SMTP through SSL, set it to 'tls'." placeholder="tls" <x-forms.input helper="If SMTP through SSL, set it to 'tls'." placeholder="tls"
id="model.smtp_encryption" label="Encryption"/> id="model.smtp_encryption" label="Encryption" />
</div> </div>
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
<x-forms.input id="model.smtp_username" label="SMTP Username"/> <x-forms.input id="model.smtp_username" label="SMTP Username" />
<x-forms.input type="password" id="model.smtp_password" label="SMTP Password"/> <x-forms.input type="password" id="model.smtp_password" label="SMTP Password" />
<x-forms.input id="model.smtp_timeout" helper="Timeout value for sending emails." label="Timeout"/> <x-forms.input id="model.smtp_timeout" helper="Timeout value for sending emails." label="Timeout" />
</div> </div>
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
<x-forms.input required id="model.smtp_from_name" helper="Name used in emails." label="From Name"/> <x-forms.input required id="model.smtp_from_name" helper="Name used in emails." label="From Name" />
<x-forms.input required id="model.smtp_from_address" helper="Email address used in emails." <x-forms.input required id="model.smtp_from_address" helper="Email address used in emails."
label="From Address"/> label="From Address" />
</div> </div>
</div> </div>
</form> </form>
@ -61,17 +60,16 @@
<h4 class="mt-4">Subscribe to events</h4> <h4 class="mt-4">Subscribe to events</h4>
<div class="w-64"> <div class="w-64">
@if (is_dev()) @if (is_dev())
<x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_test" label="Test"/> <x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_test" label="Test" />
@endif @endif
<h4 class="mt-4">General</h4> <h4 class="mt-4">General</h4>
<x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_status_changes" <x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_status_changes"
label="Container Status Changes"/> label="Container Status Changes" />
<h4 class="mt-4">Applications</h4> <h4 class="mt-4">Applications</h4>
<x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_deployments" <x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_deployments" label="Deployments" />
label="Deployments"/>
<h4 class="mt-4">Databases</h4> <h4 class="mt-4">Databases</h4>
<x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_database_backups" <x-forms.checkbox instantSave="saveModel" id="model.smtp_notifications_database_backups"
label="Backup Statuses"/> label="Backup Statuses" />
</div> </div>
@endif @endif
</div> </div>

View File

@ -17,8 +17,8 @@
@endif @endif
</div> </div>
<div class="pb-8">Private Key used for SSH connection</div> <div class="pb-8">Private Key used for SSH connection</div>
<x-forms.input id="private_key.name" label="Name" required/> <x-forms.input id="private_key.name" label="Name" required />
<x-forms.input id="private_key.description" label="Description"/> <x-forms.input id="private_key.description" label="Description" />
<div> <div>
<div class="flex items-end gap-2 py-2 "> <div class="flex items-end gap-2 py-2 ">
<div class="pl-1 ">Private Key <span class='text-helper'>*</span></div> <div class="pl-1 ">Private Key <span class='text-helper'>*</span></div>
@ -33,15 +33,15 @@
</div> </div>
@if ($private_key->is_git_related) @if ($private_key->is_git_related)
<div class="w-48"> <div class="w-48">
<x-forms.checkbox id="private_key.is_git_related" disabled label="Is used by a Git App?"/> <x-forms.checkbox id="private_key.is_git_related" disabled label="Is used by a Git App?" />
</div> </div>
@endif @endif
<div x-cloak x-show="!showPrivateKey"> <div x-cloak x-show="!showPrivateKey">
<x-forms.input allowToPeak="false" type="password" rows="10" id="private_key.private_key" required <x-forms.input allowToPeak="false" type="password" rows="10" id="private_key.private_key" required
disabled/> disabled />
</div> </div>
<div x-cloak x-show="showPrivateKey"> <div x-cloak x-show="showPrivateKey">
<x-forms.textarea rows="10" id="private_key.private_key" required/> <x-forms.textarea rows="10" id="private_key.private_key" required />
</div> </div>
</div> </div>
</form> </form>

View File

@ -1,11 +1,11 @@
<div> <div>
<form class="flex flex-col gap-2" wire:submit.prevent='createPrivateKey'> <form class="flex flex-col gap-2" wire:submit.prevent='createPrivateKey'>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="name" label="Name" required/> <x-forms.input id="name" label="Name" required />
<x-forms.input id="description" label="Description"/> <x-forms.input id="description" label="Description" />
</div> </div>
<x-forms.textarea id="value" rows="10" placeholder="-----BEGIN OPENSSH PRIVATE KEY-----" <x-forms.textarea id="value" rows="10" placeholder="-----BEGIN OPENSSH PRIVATE KEY-----"
label="Private Key" required/> label="Private Key" required />
<x-forms.button type="submit"> <x-forms.button type="submit">
Save Private Key Save Private Key
</x-forms.button> </x-forms.button>

View File

@ -5,8 +5,8 @@
<x-forms.button type="submit" label="Save">Save</x-forms.button> <x-forms.button type="submit" label="Save">Save</x-forms.button>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="name" label="Name" required/> <x-forms.input id="name" label="Name" required />
<x-forms.input id="email" label="Email" readonly/> <x-forms.input id="email" label="Email" readonly />
</div> </div>
</form> </form>
</div> </div>

View File

@ -1,7 +1,7 @@
<dialog id="newEmptyProject" class="modal"> <dialog id="newEmptyProject" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'>
<x-forms.input placeholder="Your Cool Project" id="name" label="Name" required/> <x-forms.input placeholder="Your Cool Project" id="name" label="Name" required />
<x-forms.input placeholder="This is my cool project everyone knows about" id="description" label="Description"/> <x-forms.input placeholder="This is my cool project everyone knows about" id="description" label="Description" />
<x-forms.button onclick="newEmptyProject.close()" type="submit"> <x-forms.button onclick="newEmptyProject.close()" type="submit">
Save Save
</x-forms.button> </x-forms.button>

View File

@ -1,6 +1,6 @@
<dialog id="newEnvironment" class="modal"> <dialog id="newEnvironment" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'>
<x-forms.input placeholder="production" id="name" label="Name" required/> <x-forms.input placeholder="production" id="name" label="Name" required />
<x-forms.button onclick="newEnvironment.close()" type="submit"> <x-forms.button onclick="newEnvironment.close()" type="submit">
Save Save
</x-forms.button> </x-forms.button>

View File

@ -1,10 +1,10 @@
<div class="pt-4"> <div class="pt-4">
<livewire:project.application.deployment-navbar :application_deployment_queue="$application_deployment_queue"/> <livewire:project.application.deployment-navbar :application_deployment_queue="$application_deployment_queue" />
@if (data_get($application_deployment_queue, 'status') === 'in_progress') @if (data_get($application_deployment_queue, 'status') === 'in_progress')
<div class="flex items-center gap-1 pt-2 ">Deployment is <div class="flex items-center gap-1 pt-2 ">Deployment is
<div class="text-warning"> {{ Str::headline(data_get($this->application_deployment_queue, 'status')) }}. <div class="text-warning"> {{ Str::headline(data_get($this->application_deployment_queue, 'status')) }}.
</div> </div>
<x-loading class="loading-ring"/> <x-loading class="loading-ring" />
</div> </div>
<div class="">Logs will be updated automatically.</div> <div class="">Logs will be updated automatically.</div>
@else @else
@ -24,7 +24,9 @@
'text-warning' => $line['hidden'], 'text-warning' => $line['hidden'],
])>[{{ $line['timestamp'] }}] @if ($line['hidden']) ])>[{{ $line['timestamp'] }}] @if ($line['hidden'])
<br>Command: {{ $line['command'] }} <br>Output: <br>Command: {{ $line['command'] }} <br>Output:
@endif{{ $line['output'] }}@if ($line['hidden']) @endif</div> @endif{{ $line['output'] }}@if ($line['hidden'])
@endif
</div>
@endforeach @endforeach
@else @else
<span class="font-mono text-neutral-400">No logs yet.</span> <span class="font-mono text-neutral-400">No logs yet.</span>

View File

@ -42,8 +42,7 @@
@endif @endif
</div> </div>
@endif @endif
<div class="flex flex-col" <div class="flex flex-col" x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')">
x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')">
<div> <div>
@if ($deployment->status !== 'in_progress') @if ($deployment->status !== 'in_progress')
Finished <span x-text="measure_since_started()">0s</span> in Finished <span x-text="measure_since_started()">0s</span> in

View File

@ -9,11 +9,11 @@
<div class="">General configuration for your application.</div> <div class="">General configuration for your application.</div>
<div class="flex flex-col gap-2 py-4"> <div class="flex flex-col gap-2 py-4">
<div class="flex flex-col items-end gap-2 xl:flex-row"> <div class="flex flex-col items-end gap-2 xl:flex-row">
<x-forms.input id="application.name" label="Name" required/> <x-forms.input id="application.name" label="Name" required />
<x-forms.input id="application.description" label="Description"/> <x-forms.input id="application.description" label="Description" />
</div> </div>
<x-forms.input placeholder="https://coolify.io" id="application.fqdn" label="Domains" <x-forms.input placeholder="https://coolify.io" id="application.fqdn" label="Domains"
helper="You can specify one domain with path or more with comma.<br><span class='text-helper'>Example</span>- http://app.coolify.io, https://cloud.coolify.io/dashboard<br>- http://app.coolify.io/api/v3"/> helper="You can specify one domain with path or more with comma.<br><span class='text-helper'>Example</span>- http://app.coolify.io, https://cloud.coolify.io/dashboard<br>- http://app.coolify.io/api/v3" />
@if ($wildcard_domain) @if ($wildcard_domain)
<div class="flex flex-row gap-2"> <div class="flex flex-row gap-2">
@if ($global_wildcard_domain) @if ($global_wildcard_domain)
@ -39,48 +39,48 @@
@endif @endif
<h3>Build</h3> <h3>Build</h3>
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
<x-forms.input placeholder="pnpm install" id="application.install_command" label="Install Command"/> <x-forms.input placeholder="pnpm install" id="application.install_command" label="Install Command" />
<x-forms.input placeholder="pnpm build" id="application.build_command" label="Build Command"/> <x-forms.input placeholder="pnpm build" id="application.build_command" label="Build Command" />
<x-forms.input placeholder="pnpm start" id="application.start_command" label="Start Command"/> <x-forms.input placeholder="pnpm start" id="application.start_command" label="Start Command" />
</div> </div>
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
<x-forms.input placeholder="/" id="application.base_directory" label="Base Directory" <x-forms.input placeholder="/" id="application.base_directory" label="Base Directory"
helper="Directory to use as root. Useful for monorepos. WIP" disabled/> helper="Directory to use as root. Useful for monorepos. WIP" disabled />
@if ($application->settings->is_static) @if ($application->settings->is_static)
<x-forms.input placeholder="/dist" id="application.publish_directory" label="Publish Directory" <x-forms.input placeholder="/dist" id="application.publish_directory" label="Publish Directory"
required/> required />
@else @else
<x-forms.input placeholder="/" id="application.publish_directory" label="Publish Directory"/> <x-forms.input placeholder="/" id="application.publish_directory" label="Publish Directory" />
@endif @endif
</div> </div>
<h3>Network</h3> <h3>Network</h3>
<div class="flex flex-col gap-2 xl:flex-row"> <div class="flex flex-col gap-2 xl:flex-row">
@if ($application->settings->is_static) @if ($application->settings->is_static)
<x-forms.input id="application.ports_exposes" label="Ports Exposes" readonly/> <x-forms.input id="application.ports_exposes" label="Ports Exposes" readonly />
@else @else
<x-forms.input placeholder="3000,3001" id="application.ports_exposes" label="Ports Exposes" required <x-forms.input placeholder="3000,3001" id="application.ports_exposes" label="Ports Exposes" required
helper="A comma separated list of ports you would like to expose for the proxy."/> helper="A comma separated list of ports you would like to expose for the proxy." />
@endif @endif
<x-forms.input placeholder="3000:3000" id="application.ports_mappings" label="Ports Mappings" <x-forms.input placeholder="3000:3000" id="application.ports_mappings" label="Ports Mappings"
helper="A comma separated list of ports you would like to map to the host system. Useful when you do not want to use domains.<br><span class='inline-block font-bold text-warning'>Example</span>3000:3000,3002:3002"/> helper="A comma separated list of ports you would like to map to the host system. Useful when you do not want to use domains.<br><span class='inline-block font-bold text-warning'>Example</span>3000:3000,3002:3002" />
</div> </div>
</div> </div>
<h3>Advanced</h3> <h3>Advanced</h3>
<div class="flex flex-col"> <div class="flex flex-col">
<x-forms.checkbox instantSave id="is_static" label="Is it a static site?" <x-forms.checkbox instantSave id="is_static" label="Is it a static site?"
helper="If your application is a static site or the final build assets should be served as a static site, enable this."/> helper="If your application is a static site or the final build assets should be served as a static site, enable this." />
<x-forms.checkbox <x-forms.checkbox
helper="Your application will be available only on https if your domain starts with https://..." helper="Your application will be available only on https if your domain starts with https://..."
instantSave id="is_force_https_enabled" label="Force Https"/> instantSave id="is_force_https_enabled" label="Force Https" />
<x-forms.checkbox helper="Automatically deploy new commits based on Git webhooks." instantSave <x-forms.checkbox helper="Automatically deploy new commits based on Git webhooks." instantSave
id="is_auto_deploy_enabled" label="Auto Deploy"/> id="is_auto_deploy_enabled" label="Auto Deploy" />
<x-forms.checkbox <x-forms.checkbox
helper="Allow to automatically deploy Preview Deployments for all opened PR's.<br><br>Closing a PR will delete Preview Deployments." helper="Allow to automatically deploy Preview Deployments for all opened PR's.<br><br>Closing a PR will delete Preview Deployments."
instantSave id="is_preview_deployments_enabled" label="Previews Deployments"/> instantSave id="is_preview_deployments_enabled" label="Previews Deployments" />
<x-forms.checkbox instantSave id="is_git_submodules_enabled" label="Git Submodules" <x-forms.checkbox instantSave id="is_git_submodules_enabled" label="Git Submodules"
helper="Allow Git Submodules during build process."/> helper="Allow Git Submodules during build process." />
<x-forms.checkbox instantSave id="is_git_lfs_enabled" label="Git LFS" <x-forms.checkbox instantSave id="is_git_lfs_enabled" label="Git LFS"
helper="Allow Git LFS during build process."/> helper="Allow Git LFS during build process." />
{{-- <x-forms.checkbox disabled instantSave id="is_dual_cert" label="Dual Certs?" /> {{-- <x-forms.checkbox disabled instantSave id="is_dual_cert" label="Dual Certs?" />
<x-forms.checkbox disabled instantSave id="is_custom_ssl" label="Is Custom SSL?" /> <x-forms.checkbox disabled instantSave id="is_custom_ssl" label="Is Custom SSL?" />
<x-forms.checkbox disabled instantSave id="is_http2" label="Is Http2?" /> --}} <x-forms.checkbox disabled instantSave id="is_http2" label="Is Http2?" /> --}}

View File

@ -1,4 +1,4 @@
<nav x-init="$wire.check_status" wire:poll.10000ms="check_status"> <nav x-init="$wire.check_status" wire:poll.10000ms="check_status">
<x-resources.breadcrumbs :resource="$application" :parameters="$parameters"/> <x-resources.breadcrumbs :resource="$application" :parameters="$parameters" />
<x-applications.navbar :application="$application" :parameters="$parameters"/> <x-applications.navbar :application="$application" :parameters="$parameters" />
</nav> </nav>

View File

@ -7,7 +7,7 @@
<div class="pb-4 ">Preview Deployments based on pull requests are here.</div> <div class="pb-4 ">Preview Deployments based on pull requests are here.</div>
<div class="flex flex-col gap-2 pb-4"> <div class="flex flex-col gap-2 pb-4">
<x-forms.input id="application.preview_url_template" label="Preview URL Template" <x-forms.input id="application.preview_url_template" label="Preview URL Template"
helper="Templates:<span class='text-helper'>@@{{ random }}</span> to generate random sub-domain each time a PR is deployed, <span class='text-helper'>@@{{ pr_id }}</span> to use pull request ID as sub-domain or <span class='text-helper'>@@{{ domain }}</span> to replace the domain name with the application's domain name."/> helper="Templates:<span class='text-helper'>@@{{ random }}</span> to generate random sub-domain each time a PR is deployed, <span class='text-helper'>@@{{ pr_id }}</span> to use pull request ID as sub-domain or <span class='text-helper'>@@{{ domain }}</span> to replace the domain name with the application's domain name." />
<div class="">Domain Preview: {{ $preview_url_template }}</div> <div class="">Domain Preview: {{ $preview_url_template }}</div>
</div> </div>
</form> </form>

View File

@ -1,5 +1,5 @@
<div> <div>
<livewire:project.application.preview.form :application="$application"/> <livewire:project.application.preview.form :application="$application" />
<div> <div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<h3>Pull Requests on Git</h3> <h3>Pull Requests on Git</h3>
@ -30,7 +30,7 @@
<a target="_blank" class="text-xs" <a target="_blank" class="text-xs"
href="{{ data_get($pull_request, 'html_url') }}">Open PR on href="{{ data_get($pull_request, 'html_url') }}">Open PR on
Git Git
<x-external-link/> <x-external-link />
</a> </a>
</td> </td>
<td> <td>
@ -51,24 +51,23 @@
<h4 class="py-4" wire:poll.10000ms='previewRefresh'>Deployed Previews</h4> <h4 class="py-4" wire:poll.10000ms='previewRefresh'>Deployed Previews</h4>
<div class="flex gap-6 "> <div class="flex gap-6 ">
@foreach ($application->previews as $preview) @foreach ($application->previews as $preview)
<div class="flex flex-col p-4 bg-coolgray-200 " <div class="flex flex-col p-4 bg-coolgray-200 " x-init="$wire.loadStatus('{{ data_get($preview, 'pull_request_id') }}')">
x-init="$wire.loadStatus('{{ data_get($preview, 'pull_request_id') }}')">
<div class="flex gap-2">PR #{{ data_get($preview, 'pull_request_id') }} | <div class="flex gap-2">PR #{{ data_get($preview, 'pull_request_id') }} |
@if (data_get($preview, 'status') === 'running') @if (data_get($preview, 'status') === 'running')
<x-status.running/> <x-status.running />
@elseif (data_get($preview, 'status') === 'restarting') @elseif (data_get($preview, 'status') === 'restarting')
<x-status.restarting/> <x-status.restarting />
@else @else
<x-status.stopped/> <x-status.stopped />
@endif @endif
@if (data_get($preview, 'status') !== 'exited') @if (data_get($preview, 'status') !== 'exited')
| <a target="_blank" href="{{ data_get($preview, 'fqdn') }}">Open Preview | <a target="_blank" href="{{ data_get($preview, 'fqdn') }}">Open Preview
<x-external-link/> <x-external-link />
</a> </a>
@endif @endif
| |
<a target="_blank" href="{{ data_get($preview, 'pull_request_html_url') }}">Open PR on Git <a target="_blank" href="{{ data_get($preview, 'pull_request_html_url') }}">Open PR on Git
<x-external-link/> <x-external-link />
</a> </a>
</div> </div>
<div class="flex items-center gap-2 pt-6"> <div class="flex items-center gap-2 pt-6">

View File

@ -6,20 +6,20 @@
<a target="_blank" class="hover:no-underline" href="{{ $application?->gitBranchLocation }}"> <a target="_blank" class="hover:no-underline" href="{{ $application?->gitBranchLocation }}">
<x-forms.button> <x-forms.button>
Open Repository Open Repository
<x-external-link/> <x-external-link />
</x-forms.button> </x-forms.button>
</a> </a>
@if (!$application->source->is_public) @if (!$application->source->is_public)
<a target="_blank" class="hover:no-underline" href="{{ get_installation_path($application->source) }}"> <a target="_blank" class="hover:no-underline" href="{{ get_installation_path($application->source) }}">
<x-forms.button> <x-forms.button>
Open Git App Open Git App
<x-external-link/> <x-external-link />
</x-forms.button> </x-forms.button>
</a> </a>
@endif @endif
<a target="_blank" class="flex hover:no-underline" href="{{ $application?->gitCommits }}"> <a target="_blank" class="flex hover:no-underline" href="{{ $application?->gitCommits }}">
<x-forms.button>Open Commits on Git <x-forms.button>Open Commits on Git
<x-external-link/> <x-external-link />
</x-forms.button> </x-forms.button>
</a> </a>
</div> </div>
@ -27,11 +27,11 @@
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input placeholder="coollabsio/coolify-example" id="application.git_repository" <x-forms.input placeholder="coollabsio/coolify-example" id="application.git_repository"
label="Repository"/> label="Repository" />
<x-forms.input placeholder="main" id="application.git_branch" label="Branch"/> <x-forms.input placeholder="main" id="application.git_branch" label="Branch" />
</div> </div>
<div class="flex items-end gap-2"> <div class="flex items-end gap-2">
<x-forms.input placeholder="HEAD" id="application.git_commit_sha" placeholder="HEAD" label="Commit SHA"/> <x-forms.input placeholder="HEAD" id="application.git_commit_sha" placeholder="HEAD" label="Commit SHA" />
</div> </div>
@isset($application->private_key_id) @isset($application->private_key_id)

View File

@ -9,21 +9,21 @@
@endif @endif
</div> </div>
<div class="w-32 pb-2"> <div class="w-32 pb-2">
<x-forms.checkbox instantSave label="Backup Enabled" id="backup.enabled"/> <x-forms.checkbox instantSave label="Backup Enabled" id="backup.enabled" />
<x-forms.checkbox instantSave label="S3 Enabled" id="backup.save_s3"/> <x-forms.checkbox instantSave label="S3 Enabled" id="backup.save_s3" />
</div> </div>
@if($backup->save_s3) @if ($backup->save_s3)
<div class="pb-6"> <div class="pb-6">
<x-forms.select id="backup.s3_storage_id" label="S3 Storage" required> <x-forms.select id="backup.s3_storage_id" label="S3 Storage" required>
<option value="default" disabled>Select a S3 storage</option> <option value="default" disabled>Select a S3 storage</option>
@foreach($s3s as $s3) @foreach ($s3s as $s3)
<option value="{{ $s3->id }}">{{ $s3->name }}</option> <option value="{{ $s3->id }}">{{ $s3->name }}</option>
@endforeach @endforeach
</x-forms.select> </x-forms.select>
</div> </div>
@endif @endif
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input label="Frequency" id="backup.frequency"/> <x-forms.input label="Frequency" id="backup.frequency" />
<x-forms.input label="Number of backups to keep (locally)" id="backup.number_of_backups_locally"/> <x-forms.input label="Number of backups to keep (locally)" id="backup.number_of_backups_locally" />
</div> </div>
</form> </form>

View File

@ -1,7 +1,7 @@
<div class="flex gap-2"> <div class="flex gap-2">
<div class="flex-1"></div> <div class="flex-1"></div>
{{-- @if(data_get($execution,'status') !== 'failed')--}} {{-- @if (data_get($execution, 'status') !== 'failed') --}}
{{-- <x-forms.button class="bg-coollabs-100 hover:bg-coollabs" wire:click="download">Download</x-forms.button>--}} {{-- <x-forms.button class="bg-coollabs-100 hover:bg-coollabs" wire:click="download">Download</x-forms.button> --}}
{{-- @endif--}} {{-- @endif --}}
<x-forms.button isError wire:click="delete">Delete</x-forms.button> <x-forms.button isError wire:click="delete">Delete</x-forms.button>
</div> </div>

View File

@ -1,20 +1,19 @@
<div class="flex flex-col gap-2 flex-col-reverse"> <div class="flex flex-col flex-col-reverse gap-2">
@forelse($executions as $execution) @forelse($executions as $execution)
<form class="border-1 bg-coolgray-300 p-2 border-dotted flex flex-col" <form class="flex flex-col p-2 border-dotted border-1 bg-coolgray-300" @class([
@class([ 'border-green-500' => data_get($execution, 'status') === 'success',
'border-green-500' => data_get($execution,'status') === 'success', 'border-red-500' => data_get($execution, 'status') === 'failed',
'border-red-500' => data_get($execution,'status') === 'failed',
])> ])>
<div>Started At: {{data_get($execution,'created_at')}}</div> <div>Started At: {{ data_get($execution, 'created_at') }}</div>
<div>Status: {{data_get($execution,'status')}}</div> <div>Status: {{ data_get($execution, 'status') }}</div>
@if(data_get($execution,'message')) @if (data_get($execution, 'message'))
<div>Message: {{data_get($execution,'message')}}</div> <div>Message: {{ data_get($execution, 'message') }}</div>
@endif @endif
<div>Size: {{data_get($execution,'size')}} B / {{round((int)data_get($execution,'size') / 1024,2)}} <div>Size: {{ data_get($execution, 'size') }} B / {{ round((int) data_get($execution, 'size') / 1024, 2) }}
kB / {{round((int)data_get($execution,'size')/1024/1024,2)}} MB kB / {{ round((int) data_get($execution, 'size') / 1024 / 1024, 2) }} MB
</div> </div>
<div>Location: {{data_get($execution,'filename')}}</div> <div>Location: {{ data_get($execution, 'filename') }}</div>
<livewire:project.database.backup-execution :execution="$execution" :wire:key="$execution->id"/> <livewire:project.database.backup-execution :execution="$execution" :wire:key="$execution->id" />
</form> </form>
@empty @empty
<div>No executions found.</div> <div>No executions found.</div>

View File

@ -1,4 +1,4 @@
<nav x-init="$wire.check_status" wire:poll.10000ms="check_status"> <nav x-init="$wire.check_status" wire:poll.10000ms="check_status">
<x-resources.breadcrumbs :resource="$database" :parameters="$parameters"/> <x-resources.breadcrumbs :resource="$database" :parameters="$parameters" />
<x-databases.navbar :database="$database" :parameters="$parameters"/> <x-databases.navbar :database="$database" :parameters="$parameters" />
</nav> </nav>

View File

@ -1,10 +1,10 @@
<div> <div>
<form wire:submit.prevent="submit"> <form wire:submit.prevent="submit">
<div class="flex gap-2 items-end"> <div class="flex items-end gap-2">
<x-forms.input id="filename" label="Filename"/> <x-forms.input id="filename" label="Filename" />
<x-forms.button type="submit">Save</x-forms.button> <x-forms.button type="submit">Save</x-forms.button>
<x-forms.button isError wire:click.prevent="delete">Delete</x-forms.button> <x-forms.button isError wire:click.prevent="delete">Delete</x-forms.button>
</div> </div>
<x-forms.textarea id="content" label="Content"/> <x-forms.textarea id="content" label="Content" />
</form> </form>
</div> </div>

View File

@ -2,8 +2,8 @@
<dialog id="newInitScript" class="modal"> <dialog id="newInitScript" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='save_new_init_script'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='save_new_init_script'>
<h3 class="text-lg font-bold">Add Init Script</h3> <h3 class="text-lg font-bold">Add Init Script</h3>
<x-forms.input placeholder="create_test_db.sql" id="new_filename" label="Filename" required/> <x-forms.input placeholder="create_test_db.sql" id="new_filename" label="Filename" required />
<x-forms.textarea placeholder="CREATE DATABASE test;" id="new_content" label="Content" required/> <x-forms.textarea placeholder="CREATE DATABASE test;" id="new_content" label="Content" required />
<x-forms.button onclick="newInitScript.close()" type="submit"> <x-forms.button onclick="newInitScript.close()" type="submit">
Save Save
</x-forms.button> </x-forms.button>
@ -21,41 +21,40 @@
</x-forms.button> </x-forms.button>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input label="Name" id="database.name"/> <x-forms.input label="Name" id="database.name" />
<x-forms.input label="Description" id="database.description"/> <x-forms.input label="Description" id="database.description" />
<x-forms.input label="Image" id="database.image" required <x-forms.input label="Image" id="database.image" required
helper="For all available images, check here:<br><br><a target='_blank' href='https://hub.docker.com/_/postgres'>https://hub.docker.com/_/postgres</a>"/> helper="For all available images, check here:<br><br><a target='_blank' href='https://hub.docker.com/_/postgres'>https://hub.docker.com/_/postgres</a>" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
@if ($database->started_at) @if ($database->started_at)
<x-forms.input label="Username" id="database.postgres_username" placeholder="If empty: postgres" <x-forms.input label="Username" id="database.postgres_username" placeholder="If empty: postgres"
readonly helper="You can only modify it before the initial start."/> readonly helper="You can only modify it before the initial start." />
<x-forms.input label="Password" id="database.postgres_password" type="password" required readonly <x-forms.input label="Password" id="database.postgres_password" type="password" required readonly
helper="You can only modify it before the initial start."/> helper="You can only modify it before the initial start." />
<x-forms.input label="Database" id="database.postgres_db" <x-forms.input label="Database" id="database.postgres_db"
placeholder="If empty, it will be the same as Username." placeholder="If empty, it will be the same as Username." readonly
readonly helper="You can only modify it before the initial start." />
helper="You can only modify it before the initial start."/>
@else @else
<x-forms.input label="Username" id="database.postgres_user" placeholder="If empty: postgres" <x-forms.input label="Username" id="database.postgres_user" placeholder="If empty: postgres"
helper="You can only modify it before the initial start."/> helper="You can only modify it before the initial start." />
<x-forms.input label="Password" id="database.postgres_password" type="password" required <x-forms.input label="Password" id="database.postgres_password" type="password" required
helper="You can only modify it before the initial start."/> helper="You can only modify it before the initial start." />
<x-forms.input label="Database" id="database.postgres_db" <x-forms.input label="Database" id="database.postgres_db"
placeholder="If empty, it will be the same as Username." placeholder="If empty, it will be the same as Username."
helper="You can only modify it before the initial start."/> helper="You can only modify it before the initial start." />
@endif @endif
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input label="Initial Arguments" id="database.postgres_initdb_args" <x-forms.input label="Initial Arguments" id="database.postgres_initdb_args"
placeholder="If empty, use default. See in docker docs."/> placeholder="If empty, use default. See in docker docs." />
<x-forms.input label="Host Auth Method" id="database.postgres_host_auth_method" <x-forms.input label="Host Auth Method" id="database.postgres_host_auth_method"
placeholder="If empty, use default. See in docker docs."/> placeholder="If empty, use default. See in docker docs." />
</div> </div>
<div class=""> <div class="">
<h3 class="py-2">Network</h3> <h3 class="py-2">Network</h3>
<x-forms.input placeholder="3000:5432" id="database.ports_mappings" label="Ports Mappings" <x-forms.input placeholder="3000:5432" id="database.ports_mappings" label="Ports Mappings"
helper="A comma separated list of ports you would like to map to the host system.<br><span class='inline-block font-bold text-warning'>Example</span>3000:5432,3002:5433"/> helper="A comma separated list of ports you would like to map to the host system.<br><span class='inline-block font-bold text-warning'>Example</span>3000:5432,3002:5433" />
</div> </div>
</form> </form>
<div class="pb-16"> <div class="pb-16">
@ -65,7 +64,7 @@
</div> </div>
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
@forelse(data_get($database,'init_scripts', []) as $script) @forelse(data_get($database,'init_scripts', []) as $script)
<livewire:project.database.init-script :script="$script" :wire:key="$script['index']"/> <livewire:project.database.init-script :script="$script" :wire:key="$script['index']" />
@empty @empty
<div>No initialization scripts found.</div> <div>No initialization scripts found.</div>
@endforelse @endforelse

View File

@ -1,10 +1,10 @@
<div class="flex flex-wrap gap-2"> <div class="flex flex-wrap gap-2">
@forelse($database->scheduledBackups as $backup) @forelse($database->scheduledBackups as $backup)
<a class="box flex flex-col" <a class="flex flex-col box"
href="{{ route('project.database.backups.executions', [...$parameters,'backup_uuid'=> $backup->uuid]) }}"> href="{{ route('project.database.backups.executions', [...$parameters, 'backup_uuid' => $backup->uuid]) }}">
<div>Frequency: {{$backup->frequency}}</div> <div>Frequency: {{ $backup->frequency }}</div>
<div>Last backup: {{data_get($backup->latest_log, 'status','No backup yet')}}</div> <div>Last backup: {{ data_get($backup->latest_log, 'status', 'No backup yet') }}</div>
<div>Number of backups to keep (locally): {{$backup->number_of_backups_locally}}</div> <div>Number of backups to keep (locally): {{ $backup->number_of_backups_locally }}</div>
</a> </a>
@empty @empty
<div>No scheduled backups configured.</div> <div>No scheduled backups configured.</div>

View File

@ -4,13 +4,13 @@
<h1>Project: {{ data_get($project, 'name') }}</h1> <h1>Project: {{ data_get($project, 'name') }}</h1>
<x-forms.button type="submit">Save</x-forms.button> <x-forms.button type="submit">Save</x-forms.button>
@if ($project->applications->count() === 0) @if ($project->applications->count() === 0)
<livewire:project.delete-project :project_id="$project->id"/> <livewire:project.delete-project :project_id="$project->id" />
@endif @endif
</div> </div>
<div class="pb-10">Edit project details here.</div> <div class="pb-10">Edit project details here.</div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input label="Name" id="project.name"/> <x-forms.input label="Name" id="project.name" />
<x-forms.input label="Description" id="project.description"/> <x-forms.input label="Description" id="project.description" />
</div> </div>
</form> </form>
</div> </div>

View File

@ -43,17 +43,17 @@
<form class="flex flex-col gap-2 pb-6" wire:submit.prevent='submit'> <form class="flex flex-col gap-2 pb-6" wire:submit.prevent='submit'>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="repository_url" required label="Repository URL" <x-forms.input id="repository_url" required label="Repository URL"
helper="{!! __('repository.url') !!}"/> helper="{!! __('repository.url') !!}" />
<x-forms.input id="branch" required label="Branch"/> <x-forms.input id="branch" required label="Branch" />
@if ($is_static) @if ($is_static)
<x-forms.input id="publish_directory" required label="Publish Directory"/> <x-forms.input id="publish_directory" required label="Publish Directory" />
@else @else
<x-forms.input type="number" required id="port" label="Port" :readonly="$is_static"/> <x-forms.input type="number" required id="port" label="Port" :readonly="$is_static" />
@endif @endif
</div> </div>
<div class="w-52"> <div class="w-52">
<x-forms.checkbox instantSave id="is_static" label="Is it a static site?" <x-forms.checkbox instantSave id="is_static" label="Is it a static site?"
helper="If your application is a static site or the final build assets should be served as a static site, enable this."/> helper="If your application is a static site or the final build assets should be served as a static site, enable this." />
</div> </div>
<x-forms.button type="submit"> <x-forms.button type="submit">
Save New Application Save New Application

View File

@ -86,15 +86,15 @@
</x-forms.select> </x-forms.select>
@if ($is_static) @if ($is_static)
<x-forms.input id="publish_directory" label="Publish Directory" <x-forms.input id="publish_directory" label="Publish Directory"
helper="If there is a build process involved (like Svelte, React, Next, etc..), please specify the output directory for the build assets."/> helper="If there is a build process involved (like Svelte, React, Next, etc..), please specify the output directory for the build assets." />
@else @else
<x-forms.input type="number" id="port" label="Port" :readonly="$is_static" <x-forms.input type="number" id="port" label="Port" :readonly="$is_static"
helper="The port your application listens on."/> helper="The port your application listens on." />
@endif @endif
</div> </div>
<div class="w-52"> <div class="w-52">
<x-forms.checkbox instantSave id="is_static" label="Is it a static site?" <x-forms.checkbox instantSave id="is_static" label="Is it a static site?"
helper="If your application is a static site or the final build assets should be served as a static site, enable this."/> helper="If your application is a static site or the final build assets should be served as a static site, enable this." />
</div> </div>
</div> </div>
<x-forms.button type="submit"> <x-forms.button type="submit">
@ -111,4 +111,4 @@
</a> </a>
</div> </div>
@endif @endif
</div> </div>

View File

@ -6,7 +6,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex items-end gap-2"> <div class="flex items-end gap-2">
<x-forms.input wire:keydown.enter='load_branch' id="repository_url" label="Repository URL" <x-forms.input wire:keydown.enter='load_branch' id="repository_url" label="Repository URL"
helper="{!! __('repository.url') !!}"/> helper="{!! __('repository.url') !!}" />
<x-forms.button wire:click.prevent="load_branch"> <x-forms.button wire:click.prevent="load_branch">
Check repository Check repository
</x-forms.button> </x-forms.button>
@ -16,25 +16,25 @@
<div class="flex gap-2 py-2"> <div class="flex gap-2 py-2">
<div>Rate Limit</div> <div>Rate Limit</div>
<x-helper <x-helper
helper="Rate limit remaining: {{ $rate_limit_remaining }}<br>Rate limit reset at: {{ $rate_limit_reset }}"/> helper="Rate limit remaining: {{ $rate_limit_remaining }}<br>Rate limit reset at: {{ $rate_limit_reset }}" />
</div> </div>
@endif @endif
<h3 class="pt-8 pb-2">Details</h3> <h3 class="pt-8 pb-2">Details</h3>
<div class="flex flex-col gap-2 pb-6"> <div class="flex flex-col gap-2 pb-6">
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input disabled id="git_branch" label="Selected branch" <x-forms.input disabled id="git_branch" label="Selected branch"
helper="You can select other branches after configuration is done."/> helper="You can select other branches after configuration is done." />
@if ($is_static) @if ($is_static)
<x-forms.input id="publish_directory" label="Publish Directory" <x-forms.input id="publish_directory" label="Publish Directory"
helper="If there is a build process involved (like Svelte, React, Next, etc..), please specify the output directory for the build assets."/> helper="If there is a build process involved (like Svelte, React, Next, etc..), please specify the output directory for the build assets." />
@else @else
<x-forms.input type="number" id="port" label="Port" :readonly="$is_static" <x-forms.input type="number" id="port" label="Port" :readonly="$is_static"
helper="The port your application listens on."/> helper="The port your application listens on." />
@endif @endif
</div> </div>
<div class="w-52"> <div class="w-52">
<x-forms.checkbox instantSave id="is_static" label="Is it a static site?" <x-forms.checkbox instantSave id="is_static" label="Is it a static site?"
helper="If your application is a static site or the final build assets should be served as a static site, enable this."/> helper="If your application is a static site or the final build assets should be served as a static site, enable this." />
</div> </div>
</div> </div>
<x-forms.button wire:click.prevent='submit'> <x-forms.button wire:click.prevent='submit'>

View File

@ -1,10 +1,10 @@
<dialog id="newVariable" class="modal"> <dialog id="newVariable" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'>
<h3 class="text-lg font-bold">Add Environment Variable</h3> <h3 class="text-lg font-bold">Add Environment Variable</h3>
<x-forms.input placeholder="NODE_ENV" id="key" label="Name" required/> <x-forms.input placeholder="NODE_ENV" id="key" label="Name" required />
<x-forms.input placeholder="production" id="value" label="Value" required/> <x-forms.input placeholder="production" id="value" label="Value" required />
@if (data_get($parameters, 'application_uuid')) @if (data_get($parameters, 'application_uuid'))
<x-forms.checkbox id="is_build_time" label="Build Variable?"/> <x-forms.checkbox id="is_build_time" label="Build Variable?" />
@endif @endif
<x-forms.button onclick="newVariable.close()" type="submit"> <x-forms.button onclick="newVariable.close()" type="submit">
Save Save

View File

@ -3,13 +3,13 @@
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<h2>Environment Variables</h2> <h2>Environment Variables</h2>
<x-forms.button class="btn" onclick="newVariable.showModal()">+ Add</x-forms.button> <x-forms.button class="btn" onclick="newVariable.showModal()">+ Add</x-forms.button>
<livewire:project.shared.environment-variable.add/> <livewire:project.shared.environment-variable.add />
</div> </div>
<div>Environment (secrets) variables for this resource.</div> <div>Environment (secrets) variables for this resource.</div>
</div> </div>
@forelse ($resource->environment_variables as $env) @forelse ($resource->environment_variables as $env)
<livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}" <livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}"
:env="$env"/> :env="$env" />
@empty @empty
<div class="text-neutral-500">No environment variables found.</div> <div class="text-neutral-500">No environment variables found.</div>
@endforelse @endforelse
@ -20,7 +20,7 @@
</div> </div>
@foreach ($resource->environment_variables_preview as $env) @foreach ($resource->environment_variables_preview as $env)
<livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}" <livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}"
:env="$env"/> :env="$env" />
@endforeach @endforeach
@endif @endif
</div> </div>

View File

@ -6,10 +6,10 @@
</x-slot:modalBody> </x-slot:modalBody>
</x-modal> </x-modal>
<form wire:submit.prevent='submit' class="flex flex-col items-center gap-2 xl:flex-row"> <form wire:submit.prevent='submit' class="flex flex-col items-center gap-2 xl:flex-row">
<x-forms.input id="env.key"/> <x-forms.input id="env.key" />
<x-forms.input type="password" id="env.value"/> <x-forms.input type="password" id="env.value" />
@if (data_get($parameters, 'application_uuid')) @if (data_get($parameters, 'application_uuid'))
<x-forms.checkbox disabled id="env.is_build_time" label="Build Variable?"/> <x-forms.checkbox disabled id="env.is_build_time" label="Build Variable?" />
@endif @endif
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.button type="submit"> <x-forms.button type="submit">

View File

@ -7,20 +7,20 @@
<div class="">Limit your container resources by CPU & memory.</div> <div class="">Limit your container resources by CPU & memory.</div>
<h3 class="pt-4">Limit CPUs</h3> <h3 class="pt-4">Limit CPUs</h3>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input placeholder="1.5" label="Number of CPUs" id="resource.limits_cpus"/> <x-forms.input placeholder="1.5" label="Number of CPUs" id="resource.limits_cpus" />
<x-forms.input placeholder="0-2" label="CPU sets to use" id="resource.limits_cpuset"/> <x-forms.input placeholder="0-2" label="CPU sets to use" id="resource.limits_cpuset" />
<x-forms.input placeholder="1024" label="CPU Weight" id="resource.limits_cpu_shares"/> <x-forms.input placeholder="1024" label="CPU Weight" id="resource.limits_cpu_shares" />
</div> </div>
<h3 class="pt-4">Limit Memory</h3> <h3 class="pt-4">Limit Memory</h3>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Soft Memory Limit" <x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Soft Memory Limit"
id="resource.limits_memory_reservation"/> id="resource.limits_memory_reservation" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Memory Limit" <x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Memory Limit"
id="resource.limits_memory"/> id="resource.limits_memory" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Swap Limit" <x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Swap Limit"
id="resource.limits_memory_swap"/> id="resource.limits_memory_swap" />
<x-forms.input placeholder="0-100" type="number" min="0" max="100" label="Swappiness" <x-forms.input placeholder="0-100" type="number" min="0" max="100" label="Swappiness"
id="resource.limits_memory_swappiness"/> id="resource.limits_memory_swappiness" />
</div> </div>
</form> </form>
</div> </div>

View File

@ -1,9 +1,9 @@
<dialog id="newStorage" class="modal"> <dialog id="newStorage" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'>
<h3 class="text-lg font-bold">Add Storage Volume</h3> <h3 class="text-lg font-bold">Add Storage Volume</h3>
<x-forms.input placeholder="pv-name" id="name" label="Name" required/> <x-forms.input placeholder="pv-name" id="name" label="Name" required />
<x-forms.input placeholder="/root" id="host_path" label="Source Path"/> <x-forms.input placeholder="/root" id="host_path" label="Source Path" />
<x-forms.input placeholder="/tmp/root" id="mount_path" label="Destination Path" required/> <x-forms.input placeholder="/tmp/root" id="mount_path" label="Destination Path" required />
<x-forms.button onclick="newStorage.close()" type="submit"> <x-forms.button onclick="newStorage.close()" type="submit">
Save Save
</x-forms.button> </x-forms.button>

View File

@ -5,15 +5,15 @@
<x-helper <x-helper
helper="For Preview Deployments, storage has a <span class='text-helper'>-pr-#PRNumber</span> in their helper="For Preview Deployments, storage has a <span class='text-helper'>-pr-#PRNumber</span> in their
volume volume
name, example: <span class='text-helper'>-pr-1</span>"/> name, example: <span class='text-helper'>-pr-1</span>" />
<x-forms.button class="btn" onclick="newStorage.showModal()">+ Add</x-forms.button> <x-forms.button class="btn" onclick="newStorage.showModal()">+ Add</x-forms.button>
<livewire:project.shared.storages.add/> <livewire:project.shared.storages.add />
</div> </div>
<div>Persistent storage to preserve data between deployments.</div> <div>Persistent storage to preserve data between deployments.</div>
</div> </div>
<div class="flex flex-col gap-2 py-4"> <div class="flex flex-col gap-2 py-4">
@forelse ($resource->persistentStorages as $storage) @forelse ($resource->persistentStorages as $storage)
<livewire:project.shared.storages.show wire:key="storage-{{ $storage->id }}" :storage="$storage"/> <livewire:project.shared.storages.show wire:key="storage-{{ $storage->id }}" :storage="$storage" />
@empty @empty
<div class="text-neutral-500">No storages found.</div> <div class="text-neutral-500">No storages found.</div>
@endforelse @endforelse

View File

@ -8,9 +8,9 @@
</x-modal> </x-modal>
<form wire:submit.prevent='submit' class="flex flex-col gap-2 xl:items-end xl:flex-row"> <form wire:submit.prevent='submit' class="flex flex-col gap-2 xl:items-end xl:flex-row">
@if ($storage->is_readonly) @if ($storage->is_readonly)
<x-forms.input id="storage.name" label="Name" required readonly/> <x-forms.input id="storage.name" label="Name" required readonly />
<x-forms.input id="storage.host_path" label="Source Path" readonly/> <x-forms.input id="storage.host_path" label="Source Path" readonly />
<x-forms.input id="storage.mount_path" label="Destination Path" required readonly/> <x-forms.input id="storage.mount_path" label="Destination Path" required readonly />
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.button type="submit" disabled> <x-forms.button type="submit" disabled>
Update Update
@ -20,9 +20,9 @@
</x-forms.button> </x-forms.button>
</div> </div>
@else @else
<x-forms.input id="storage.name" label="Name" required/> <x-forms.input id="storage.name" label="Name" required />
<x-forms.input id="storage.host_path" label="Source Path"/> <x-forms.input id="storage.host_path" label="Source Path" />
<x-forms.input id="storage.mount_path" label="Destination Path" required/> <x-forms.input id="storage.mount_path" label="Destination Path" required />
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.button type="submit"> <x-forms.button type="submit">
Update Update

View File

@ -1,6 +1,6 @@
<div> <div>
<form class="flex flex-col justify-center gap-2 xl:items-end xl:flex-row" wire:submit.prevent='runCommand'> <form class="flex flex-col justify-center gap-2 xl:items-end xl:flex-row" wire:submit.prevent='runCommand'>
<x-forms.input placeholder="ls -l" autofocus id="command" label="Command" required/> <x-forms.input placeholder="ls -l" autofocus id="command" label="Command" required />
<x-forms.select label="Server" id="server" required> <x-forms.select label="Server" id="server" required>
@foreach ($servers as $server) @foreach ($servers as $server)
@if ($loop->first) @if ($loop->first)
@ -14,6 +14,6 @@
</x-forms.button> </x-forms.button>
</form> </form>
<div class="container w-full pt-10 mx-auto"> <div class="container w-full pt-10 mx-auto">
<livewire:activity-monitor header="Logs"/> <livewire:activity-monitor header="Logs" />
</div> </div>
</div> </div>

View File

@ -22,29 +22,29 @@
</div> </div>
<div class="flex flex-col gap-2 "> <div class="flex flex-col gap-2 ">
<div class="flex flex-col w-full gap-2 lg:flex-row"> <div class="flex flex-col w-full gap-2 lg:flex-row">
<x-forms.input id="server.name" label="Name" required/> <x-forms.input id="server.name" label="Name" required />
<x-forms.input id="server.description" label="Description"/> <x-forms.input id="server.description" label="Description" />
<x-forms.input placeholder="https://example.com" id="wildcard_domain" label="Wildcard Domain" <x-forms.input placeholder="https://example.com" id="wildcard_domain" label="Wildcard Domain"
helper="Wildcard domain for your applications. If you set this, you will get a random generated domain for your new applications.<br><span class='font-bold text-white'>Example</span>In case you set:<span class='text-helper'>https://example.com</span>your applications will get: <span class='text-helper'>https://randomId.example.com</span>"/> helper="Wildcard domain for your applications. If you set this, you will get a random generated domain for your new applications.<br><span class='font-bold text-white'>Example</span>In case you set:<span class='text-helper'>https://example.com</span>your applications will get: <span class='text-helper'>https://randomId.example.com</span>" />
{{-- <x-forms.checkbox disabled type="checkbox" id="server.settings.is_part_of_swarm" {{-- <x-forms.checkbox disabled type="checkbox" id="server.settings.is_part_of_swarm"
label="Is it part of a Swarm cluster?" /> --}} label="Is it part of a Swarm cluster?" /> --}}
</div> </div>
<div class="flex flex-col w-full gap-2 lg:flex-row"> <div class="flex flex-col w-full gap-2 lg:flex-row">
@if ($server->id === 0) @if ($server->id === 0)
<x-forms.input id="server.ip" label="IP Address" required/> <x-forms.input id="server.ip" label="IP Address" required />
@else @else
<x-forms.input id="server.ip" label="IP Address" readonly required/> <x-forms.input id="server.ip" label="IP Address" readonly required />
@endif @endif
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="server.user" label="User" required/> <x-forms.input id="server.user" label="User" required />
<x-forms.input type="number" id="server.port" label="Port" required/> <x-forms.input type="number" id="server.port" label="Port" required />
</div> </div>
</div> </div>
</div> </div>
<h3 class="py-4">Settings</h3> <h3 class="py-4">Settings</h3>
<div class="flex items-center w-64 gap-2"> <div class="flex items-center w-64 gap-2">
<x-forms.input id="cleanup_after_percentage" label="Disk Cleanup threshold (%)" required <x-forms.input id="cleanup_after_percentage" label="Disk Cleanup threshold (%)" required
helper="Disk cleanup job will be executed if disk usage is more than this number."/> helper="Disk cleanup job will be executed if disk usage is more than this number." />
</div> </div>
<h3 class="py-4">Actions</h3> <h3 class="py-4">Actions</h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
@ -62,7 +62,7 @@
@endif @endif
</div> </div>
<div class="container w-full py-4 mx-auto"> <div class="container w-full py-4 mx-auto">
<livewire:activity-monitor header="Logs"/> <livewire:activity-monitor header="Logs" />
</div> </div>
@isset($uptime) @isset($uptime)
<h3 class="pb-3">Server Info</h3> <h3 class="pb-3">Server Info</h3>

View File

@ -3,14 +3,14 @@
<div class="pt-2 pb-10 ">Servers are the main blocks of your infrastructure.</div> <div class="pt-2 pb-10 ">Servers are the main blocks of your infrastructure.</div>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'> <form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="name" label="Name" required/> <x-forms.input id="name" label="Name" required />
<x-forms.input id="description" label="Description"/> <x-forms.input id="description" label="Description" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="ip" label="IP Address" required <x-forms.input id="ip" label="IP Address" required
helper="Could be IP Address (127.0.0.1) or Domain Name (duckduckgo.com)."/> helper="Could be IP Address (127.0.0.1) or Domain Name (duckduckgo.com)." />
<x-forms.input id="user" label="User" required/> <x-forms.input id="user" label="User" required />
<x-forms.input type="number" id="port" label="Port" required/> <x-forms.input type="number" id="port" label="Port" required />
</div> </div>
<x-forms.select label="Private Key" id="private_key_id"> <x-forms.select label="Private Key" id="private_key_id">
<option disabled>Select a private key</option> <option disabled>Select a private key</option>

View File

@ -29,7 +29,7 @@
</div> </div>
@empty @empty
<div>No private keys found. <div>No private keys found.
<x-use-magic-bar/> <x-use-magic-bar />
</div> </div>
@endforelse @endforelse
</div> </div>

View File

@ -21,18 +21,18 @@
</div> </div>
@endif @endif
<div class="container w-full pb-4 mx-auto"> <div class="container w-full pb-4 mx-auto">
<livewire:activity-monitor header="Logs"/> <livewire:activity-monitor header="Logs" />
</div> </div>
<x-forms.input placeholder="https://coolify.io" id="redirect_url" label="Default Redirect 404" <x-forms.input placeholder="https://coolify.io" id="redirect_url" label="Default Redirect 404"
helper="All urls that has no service available will be redirected to this domain.<span class='text-helper'>You can set to your main marketing page or your social media link.</span>"/> helper="All urls that has no service available will be redirected to this domain.<span class='text-helper'>You can set to your main marketing page or your social media link.</span>" />
<div wire:loading wire:target="load_proxy_configuration" class="pt-4"> <div wire:loading wire:target="load_proxy_configuration" class="pt-4">
<x-loading text="Loading proxy configuration..."/> <x-loading text="Loading proxy configuration..." />
</div> </div>
<div wire:loading.remove wire:target="load_proxy_configuration"> <div wire:loading.remove wire:target="load_proxy_configuration">
@if ($proxy_settings) @if ($proxy_settings)
<div class="flex flex-col gap-2 pt-2"> <div class="flex flex-col gap-2 pt-2">
<x-forms.textarea label="Configuration file: traefik.conf" name="proxy_settings" <x-forms.textarea label="Configuration file: traefik.conf" name="proxy_settings"
wire:model.defer="proxy_settings" rows="30"/> wire:model.defer="proxy_settings" rows="30" />
<x-forms.button wire:click.prevent="reset_proxy_configuration"> <x-forms.button wire:click.prevent="reset_proxy_configuration">
Reset configuration to default Reset configuration to default
</x-forms.button> </x-forms.button>
@ -46,8 +46,7 @@
<h2>Proxy</h2> <h2>Proxy</h2>
<div class="pt-2 pb-10 ">Select a proxy you would like to use on this server.</div> <div class="pt-2 pb-10 ">Select a proxy you would like to use on this server.</div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.button class="w-32 box" <x-forms.button class="w-32 box" wire:click="select_proxy('{{ ProxyTypes::TRAEFIK_V2 }}')">
wire:click="select_proxy('{{ ProxyTypes::TRAEFIK_V2 }}')">
Traefik Traefik
v2 v2
</x-forms.button> </x-forms.button>
@ -63,4 +62,4 @@
@else @else
<div>Server is not validated. Validate first.</div> <div>Server is not validated. Validate first.</div>
@endif @endif
</div> </div>

View File

@ -23,13 +23,12 @@
<button> <button>
<a target="_blank" href="{{ base_ip() }}:8080"> <a target="_blank" href="{{ base_ip() }}:8080">
Traefik Dashboard Traefik Dashboard
<x-external-link/> <x-external-link />
</a> </a>
</button> </button>
<x-forms.button isModal noStyle modalId="stopProxy" <x-forms.button isModal noStyle modalId="stopProxy"
class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400"> class="flex items-center gap-2 cursor-pointer hover:text-white text-neutral-400">
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-error" viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-error" viewBox="0 0 24 24" stroke-width="2"
stroke-width="2"
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M6 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"></path> <path d="M6 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"></path>
@ -44,8 +43,8 @@
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24" <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M7 4v16l13 -8z"/> <path d="M7 4v16l13 -8z" />
</svg> </svg>
Start Proxy Start Proxy
</x-forms.button> </x-forms.button>

View File

@ -1,9 +1,9 @@
<div wire:poll.3000ms="get_status" x-init="$wire.get_status"> <div wire:poll.3000ms="get_status" x-init="$wire.get_status">
@if ($server->proxy->status === 'running') @if ($server->proxy->status === 'running')
<x-status.running text="Proxy Running"/> <x-status.running text="Proxy Running" />
@elseif ($server->proxy->status === 'restarting') @elseif ($server->proxy->status === 'restarting')
<x-status.restarting text="Proxy Restarting"/> <x-status.restarting text="Proxy Restarting" />
@else @else
<x-status.stopped text="Proxy Stopped"/> <x-status.stopped text="Proxy Stopped" />
@endif @endif
</div> </div>

View File

@ -10,7 +10,7 @@
<div class="flex flex-col gap-2 pt-4"> <div class="flex flex-col gap-2 pt-4">
<div class="flex gap-2 w-96"> <div class="flex gap-2 w-96">
<x-forms.input id="settings.fqdn" label="Instance's Domain" placeholder="https://coolify.io"/> <x-forms.input id="settings.fqdn" label="Instance's Domain" placeholder="https://coolify.io" />
</div> </div>
{{-- <div class="flex gap-2 "> {{-- <div class="flex gap-2 ">
@ -21,10 +21,10 @@
</form> </form>
<h2 class="pt-6">Advanced</h2> <h2 class="pt-6">Advanced</h2>
<div class="flex flex-col py-6 text-right w-80"> <div class="flex flex-col py-6 text-right w-80">
<x-forms.checkbox instantSave id="is_auto_update_enabled" label="Auto Update Coolify"/> <x-forms.checkbox instantSave id="is_auto_update_enabled" label="Auto Update Coolify" />
<x-forms.checkbox instantSave id="is_registration_enabled" label="Registration Allowed"/> <x-forms.checkbox instantSave id="is_registration_enabled" label="Registration Allowed" />
<x-forms.checkbox instantSave id="do_not_track" label="Do Not Track"/> <x-forms.checkbox instantSave id="do_not_track" label="Do Not Track" />
<x-forms.checkbox instantSave helper="Do not recommended, only if you like to live on the edge." <x-forms.checkbox instantSave helper="Do not recommended, only if you like to live on the edge."
id="next_channel" label="Enable pre-release (early) updates"/> id="next_channel" label="Enable pre-release (early) updates" />
</div> </div>
</div> </div>

View File

@ -1,7 +1,7 @@
<div> <div>
<dialog id="sendTestEmail" class="modal"> <dialog id="sendTestEmail" class="modal">
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'> <form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit.prevent='submit'>
<x-forms.input placeholder="test@example.com" id="emails" label="Recepients" required/> <x-forms.input placeholder="test@example.com" id="emails" label="Recepients" required />
<x-forms.button onclick="sendTestEmail.close()" wire:click="sendTestNotification"> <x-forms.button onclick="sendTestEmail.close()" wire:click="sendTestNotification">
Send Email Send Email
</x-forms.button> </x-forms.button>
@ -25,24 +25,24 @@
</div> </div>
<div class="pb-4 ">SMTP settings for password resets, invitations, etc.</div> <div class="pb-4 ">SMTP settings for password resets, invitations, etc.</div>
<div class="w-32 pb-4"> <div class="w-32 pb-4">
<x-forms.checkbox instantSave id="settings.smtp_enabled" label="Enabled"/> <x-forms.checkbox instantSave id="settings.smtp_enabled" label="Enabled" />
</div> </div>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input required id="settings.smtp_host" placeholder="smtp.mailgun.org" label="Host"/> <x-forms.input required id="settings.smtp_host" placeholder="smtp.mailgun.org" label="Host" />
<x-forms.input required id="settings.smtp_port" placeholder="587" label="Port"/> <x-forms.input required id="settings.smtp_port" placeholder="587" label="Port" />
<x-forms.input id="settings.smtp_encryption" helper="If SMTP uses SSL, set it to 'tls'." <x-forms.input id="settings.smtp_encryption" helper="If SMTP uses SSL, set it to 'tls'."
placeholder="tls" label="Encryption"/> placeholder="tls" label="Encryption" />
</div> </div>
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input id="settings.smtp_username" label="SMTP Username"/> <x-forms.input id="settings.smtp_username" label="SMTP Username" />
<x-forms.input id="settings.smtp_password" type="password" label="SMTP Password"/> <x-forms.input id="settings.smtp_password" type="password" label="SMTP Password" />
<x-forms.input id="settings.smtp_timeout" helper="Timeout value for sending emails." label="Timeout"/> <x-forms.input id="settings.smtp_timeout" helper="Timeout value for sending emails." label="Timeout" />
</div> </div>
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input required id="settings.smtp_from_name" helper="Name used in emails." label="From Name"/> <x-forms.input required id="settings.smtp_from_name" helper="Name used in emails." label="From Name" />
<x-forms.input required id="settings.smtp_from_address" helper="Email address used in emails." <x-forms.input required id="settings.smtp_from_address" helper="Email address used in emails."
label="From Address"/> label="From Address" />
</div> </div>
</div> </div>
</form> </form>

View File

@ -15,10 +15,10 @@
<x-forms.button> <x-forms.button>
@if ($github_app->installation_id) @if ($github_app->installation_id)
Update Repositories Update Repositories
<x-external-link/> <x-external-link />
@else @else
Install Repositories Install Repositories
<x-external-link/> <x-external-link />
@endif @endif
</x-forms.button> </x-forms.button>
</a> </a>
@ -35,34 +35,34 @@
<div class="w-48"> <div class="w-48">
<x-forms.checkbox label="System Wide?" <x-forms.checkbox label="System Wide?"
helper="If checked, this GitHub App will be available for everyone in this Coolify instance." helper="If checked, this GitHub App will be available for everyone in this Coolify instance."
instantSave id="is_system_wide"/> instantSave id="is_system_wide" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="github_app.name" label="App Name" disabled/> <x-forms.input id="github_app.name" label="App Name" disabled />
<x-forms.input id="github_app.organization" label="Organization" disabled <x-forms.input id="github_app.organization" label="Organization" disabled
placeholder="If empty, personal user will be used"/> placeholder="If empty, personal user will be used" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="github_app.html_url" label="HTML Url" disabled/> <x-forms.input id="github_app.html_url" label="HTML Url" disabled />
<x-forms.input id="github_app.api_url" label="API Url" disabled/> <x-forms.input id="github_app.api_url" label="API Url" disabled />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
@if ($github_app->html_url === 'https://github.com') @if ($github_app->html_url === 'https://github.com')
<x-forms.input id="github_app.custom_user" label="User" disabled/> <x-forms.input id="github_app.custom_user" label="User" disabled />
<x-forms.input type="number" id="github_app.custom_port" label="Port" disabled/> <x-forms.input type="number" id="github_app.custom_port" label="Port" disabled />
@else @else
<x-forms.input id="github_app.custom_user" label="User" required/> <x-forms.input id="github_app.custom_user" label="User" required />
<x-forms.input type="number" id="github_app.custom_port" label="Port" required/> <x-forms.input type="number" id="github_app.custom_port" label="Port" required />
@endif @endif
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input type="number" id="github_app.app_id" label="App Id" disabled/> <x-forms.input type="number" id="github_app.app_id" label="App Id" disabled />
<x-forms.input type="number" id="github_app.installation_id" label="Installation Id" disabled/> <x-forms.input type="number" id="github_app.installation_id" label="Installation Id" disabled />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="github_app.client_id" label="Client Id" type="password" disabled/> <x-forms.input id="github_app.client_id" label="Client Id" type="password" disabled />
<x-forms.input id="github_app.client_secret" label="Client Secret" type="password"/> <x-forms.input id="github_app.client_secret" label="Client Secret" type="password" />
<x-forms.input id="github_app.webhook_secret" label="Webhook Secret" type="password"/> <x-forms.input id="github_app.webhook_secret" label="Webhook Secret" type="password" />
</div> </div>
@else @else
<form class="flex gap-4"> <form class="flex gap-4">
@ -93,34 +93,34 @@
</div> </div>
<div class="flex flex-col gap-2 pt-4"> <div class="flex flex-col gap-2 pt-4">
<x-forms.checkbox disabled instantSave id="default_permissions" label="Default Permissions" <x-forms.checkbox disabled instantSave id="default_permissions" label="Default Permissions"
helper="Contents: read<br>Metadata: read<br>Email: read"/> helper="Contents: read<br>Metadata: read<br>Email: read" />
<x-forms.checkbox instantSave id="preview_deployment_permissions" <x-forms.checkbox instantSave id="preview_deployment_permissions"
label="Preview Deployments Permission" label="Preview Deployments Permission"
helper="Necessary for updating pull requests with useful comments (deployment status, links, etc.)<br><br>Pull Request: read & write"/> helper="Necessary for updating pull requests with useful comments (deployment status, links, etc.)<br><br>Pull Request: read & write" />
</div> </div>
</div> </div>
</form> </form>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="github_app.name" label="App Name" disabled/> <x-forms.input id="github_app.name" label="App Name" disabled />
<x-forms.input id="github_app.organization" label="Organization" <x-forms.input id="github_app.organization" label="Organization"
placeholder="If empty, personal user will be used" disabled/> placeholder="If empty, personal user will be used" disabled />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="github_app.html_url" label="HTML Url" disabled/> <x-forms.input id="github_app.html_url" label="HTML Url" disabled />
<x-forms.input id="github_app.api_url" label="API Url" disabled/> <x-forms.input id="github_app.api_url" label="API Url" disabled />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
@if ($github_app->html_url === 'https://github.com') @if ($github_app->html_url === 'https://github.com')
<x-forms.input id="github_app.custom_user" label="User" disabled/> <x-forms.input id="github_app.custom_user" label="User" disabled />
<x-forms.input type="number" id="github_app.custom_port" label="Port" disabled/> <x-forms.input type="number" id="github_app.custom_port" label="Port" disabled />
@else @else
<x-forms.input id="github_app.custom_user" label="User" required/> <x-forms.input id="github_app.custom_user" label="User" required />
<x-forms.input type="number" id="github_app.custom_port" label="Port" required/> <x-forms.input type="number" id="github_app.custom_port" label="Port" required />
@endif @endif
</div> </div>
<x-forms.checkbox <x-forms.checkbox
helper="If checked, this GitHub App will be available for everyone in this Coolify instance." helper="If checked, this GitHub App will be available for everyone in this Coolify instance."
label="System Wide?" disabled id="is_system_wide"/> label="System Wide?" disabled id="is_system_wide" />
<script> <script>
function createGithubApp(webhook_endpoint, preview_deployment_permissions) { function createGithubApp(webhook_endpoint, preview_deployment_permissions) {
const { const {

View File

@ -2,19 +2,19 @@
<form wire:submit.prevent='createGitHubApp' class="flex flex-col"> <form wire:submit.prevent='createGitHubApp' class="flex flex-col">
<h2>GitHub App</h2> <h2>GitHub App</h2>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="name" label="Name" required/> <x-forms.input id="name" label="Name" required />
<x-forms.input helper="If empty, your GitHub user will be used." id="organization" label="Organization"/> <x-forms.input helper="If empty, your GitHub user will be used." id="organization" label="Organization" />
</div> </div>
<h3 class="py-4">Advanced</h3> <h3 class="py-4">Advanced</h3>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="html_url" label="HTML Url" required/> <x-forms.input id="html_url" label="HTML Url" required />
<x-forms.input id="api_url" label="API Url" required/> <x-forms.input id="api_url" label="API Url" required />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="custom_user" label="Custom Git User" required/> <x-forms.input id="custom_user" label="Custom Git User" required />
<x-forms.input id="custom_port" label="Custom Git Port" required/> <x-forms.input id="custom_port" label="Custom Git Port" required />
</div> </div>
<x-forms.checkbox class="pt-2" id="is_system_wide" label="System Wide"/> <x-forms.checkbox class="pt-2" id="is_system_wide" label="System Wide" />
<x-forms.button type="submit"> <x-forms.button type="submit">
Save New Source Save New Source
</x-forms.button> </x-forms.button>

View File

@ -1,6 +1,6 @@
<form class="flex flex-col gap-2" wire:submit.prevent='submit'> <form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<x-forms.input autofocus id="name" label="Name" required/> <x-forms.input autofocus id="name" label="Name" required />
<x-forms.input id="description" label="Description"/> <x-forms.input id="description" label="Description" />
<x-forms.button type="submit"> <x-forms.button type="submit">
Save Team Save Team
</x-forms.button> </x-forms.button>

View File

@ -6,7 +6,7 @@
</x-forms.button> </x-forms.button>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="team.name" label="Name" required/> <x-forms.input id="team.name" label="Name" required />
<x-forms.input id="team.description" label="Description"/> <x-forms.input id="team.description" label="Description" />
</div> </div>
</form> </form>

View File

@ -1,6 +1,6 @@
<div> <div>
<form wire:submit.prevent='viaLink' class="flex items-center gap-2"> <form wire:submit.prevent='viaLink' class="flex items-center gap-2">
<x-forms.input id="email" type="email" name="email" placeholder="Email"/> <x-forms.input id="email" type="email" name="email" placeholder="Email" />
<x-forms.select id="role" name="role"> <x-forms.select id="role" name="role">
<option value="admin">Admin</option> <option value="admin">Admin</option>
<option value="member">Member</option> <option value="member">Member</option>

View File

@ -3,17 +3,17 @@
<div class="pt-2 pb-10 ">S3 Storage used to save backups / files</div> <div class="pt-2 pb-10 ">S3 Storage used to save backups / files</div>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'> <form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input label="Name" id="name"/> <x-forms.input label="Name" id="name" />
<x-forms.input label="Description" id="description"/> <x-forms.input label="Description" id="description" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input type="url" label="Endpoint" id="endpoint"/> <x-forms.input type="url" label="Endpoint" id="endpoint" />
<x-forms.input required label="Bucket" id="bucket"/> <x-forms.input required label="Bucket" id="bucket" />
<x-forms.input required label="Region" id="region"/> <x-forms.input required label="Region" id="region" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input required type="password" label="Access Key" id="key"/> <x-forms.input required type="password" label="Access Key" id="key" />
<x-forms.input required type="password" label="Secret Key" id="secret"/> <x-forms.input required type="password" label="Secret Key" id="secret" />
</div> </div>
<x-forms.button type="submit"> <x-forms.button type="submit">

View File

@ -22,17 +22,17 @@
</x-forms.button> </x-forms.button>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input label="Name" id="storage.name"/> <x-forms.input label="Name" id="storage.name" />
<x-forms.input label="Description" id="storage.description"/> <x-forms.input label="Description" id="storage.description" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input required label="Endpoint" id="storage.endpoint"/> <x-forms.input required label="Endpoint" id="storage.endpoint" />
<x-forms.input required label="Bucket" id="storage.bucket"/> <x-forms.input required label="Bucket" id="storage.bucket" />
<x-forms.input required label="Region" id="storage.region"/> <x-forms.input required label="Region" id="storage.region" />
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input required type="password" label="Access Key" id="storage.key"/> <x-forms.input required type="password" label="Access Key" id="storage.key" />
<x-forms.input required type="password" label="Secret Key" id="storage.secret"/> <x-forms.input required type="password" label="Secret Key" id="storage.secret" />
</div> </div>
</form> </form>
</div> </div>

View File

@ -1,5 +1,5 @@
<li @if($isUpgradeAvailable) title="New version available" @else title="No upgrade available" <li @if ($isUpgradeAvailable) title="New version available" @else title="No upgrade available" @endif
@endif x-init="$wire.checkUpdate" x-data> x-init="$wire.checkUpdate" x-data>
@if ($isUpgradeAvailable) @if ($isUpgradeAvailable)
<button wire:key="upgrade" wire:click='upgrade' class="hover:bg-transparent focus:bg-transparent" <button wire:key="upgrade" wire:click='upgrade' class="hover:bg-transparent focus:bg-transparent"
x-on:click="upgrade"> x-on:click="upgrade">
@ -8,33 +8,32 @@
class="w-6 h-6 text-pink-500 transition-colors hover:text-pink-300 lds-heart" viewBox="0 0 24 24" class="w-6 h-6 text-pink-500 transition-colors hover:text-pink-300 lds-heart" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M19.5 13.572l-7.5 7.428l-7.5 -7.428m0 0a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"/> <path d="M19.5 13.572l-7.5 7.428l-7.5 -7.428m0 0a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" />
</svg> </svg>
@else @else
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg"
class="w-6 h-6 text-pink-500 transition-colors hover:text-pink-300" viewBox="0 0 24 24" class="w-6 h-6 text-pink-500 transition-colors hover:text-pink-300" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path <path
d="M9 12h-3.586a1 1 0 0 1 -.707 -1.707l6.586 -6.586a1 1 0 0 1 1.414 0l6.586 6.586a1 1 0 0 1 -.707 1.707h-3.586v3h-6v-3z"/> d="M9 12h-3.586a1 1 0 0 1 -.707 -1.707l6.586 -6.586a1 1 0 0 1 1.414 0l6.586 6.586a1 1 0 0 1 -.707 1.707h-3.586v3h-6v-3z" />
<path d="M9 21h6"/> <path d="M9 21h6" />
<path d="M9 18h6"/> <path d="M9 18h6" />
</svg> </svg>
@endif @endif
</button> </button>
@else @else
<button class="hover:bg-transparent"> <button class="hover:bg-transparent">
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 transition-colors text-neutral-700"
class="w-6 h-6 transition-colors text-neutral-700" viewBox="0 0 24 24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round"> stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path <path
d="M9 12h-3.586a1 1 0 0 1 -.707 -1.707l6.586 -6.586a1 1 0 0 1 1.414 0l6.586 6.586a1 1 0 0 1 -.707 1.707h-3.586v3h-6v-3z"/> d="M9 12h-3.586a1 1 0 0 1 -.707 -1.707l6.586 -6.586a1 1 0 0 1 1.414 0l6.586 6.586a1 1 0 0 1 -.707 1.707h-3.586v3h-6v-3z" />
<path d="M9 21h6"/> <path d="M9 21h6" />
<path d="M9 18h6"/> <path d="M9 18h6" />
</svg> </svg>
</button> </button>
@endif @endif

View File

@ -12,7 +12,7 @@
@empty @empty
<div> <div>
<div>No private keys found.</div> <div>No private keys found.</div>
<x-use-magic-bar link="/private-key/new"/> <x-use-magic-bar link="/private-key/new" />
</div> </div>
@endforelse @endforelse
</div> </div>

View File

@ -1,5 +1,5 @@
<x-layout> <x-layout>
<h1>Create a new Private Key</h1> <h1>Create a new Private Key</h1>
<div class="pt-2 pb-10 ">Private Keys are used for connection to servers.</div> <div class="pt-2 pb-10 ">Private Keys are used for connection to servers.</div>
<livewire:private-key.create/> <livewire:private-key.create />
</x-layout> </x-layout>

View File

@ -1,3 +1,3 @@
<x-layout> <x-layout>
<livewire:private-key.change :private_key="$private_key"/> <livewire:private-key.change :private_key="$private_key" />
</x-layout> </x-layout>

View File

@ -1,7 +1,7 @@
<x-layout> <x-layout>
<h1>Profile</h1> <h1>Profile</h1>
<div class="pt-2 pb-10 ">Your user profile settings.</div> <div class="pt-2 pb-10 ">Your user profile settings.</div>
<livewire:profile.form :request="$request"/> <livewire:profile.form :request="$request" />
<h3 class="py-4">Two-factor Authentication</h3> <h3 class="py-4">Two-factor Authentication</h3>
@if (session('status') == 'two-factor-authentication-enabled') @if (session('status') == 'two-factor-authentication-enabled')
<div class="mb-4 font-medium"> <div class="mb-4 font-medium">
@ -11,7 +11,7 @@
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<form action="/user/confirmed-two-factor-authentication" method="POST" class="flex items-end w-32 gap-2"> <form action="/user/confirmed-two-factor-authentication" method="POST" class="flex items-end w-32 gap-2">
@csrf @csrf
<x-forms.input type="number" id="code" label="One-time code" required/> <x-forms.input type="number" id="code" label="One-time code" required />
<x-forms.button type="submit">Validate 2FA</x-forms.button> <x-forms.button type="submit">Validate 2FA</x-forms.button>
</form> </form>
<div> <div>

Some files were not shown because too many files have changed in this diff Show More