This commit is contained in:
Andras Bacsai
2023-06-02 12:34:45 +02:00
parent ea5c1b9e12
commit 39d37010a3
62 changed files with 618 additions and 596 deletions

View File

@@ -39,29 +39,33 @@ select {
.breadcrumbs > ul > li::before {
@apply text-warning opacity-100;
}
.loading {
@apply w-4 text-warning;
}
button[type="button"] {
@apply btn btn-xs mt-1 bg-coolgray-200 no-animation normal-case text-white rounded;
@apply hover:bg-coolgray-400 btn h-7 btn-xs border-none bg-coolgray-200 no-animation normal-case text-white rounded;
}
button[type="submit"] {
@apply btn btn-xs mt-1 no-animation normal-case text-white btn-primary rounded;
@apply btn btn-xs no-animation h-7 normal-case text-white btn-primary rounded;
}
button[isWarning] {
@apply text-error;
@apply bg-error;
}
button[isHighlighted] {
@apply btn-primary text-white;
}
h1 {
@apply text-3xl font-bold pb-4 text-white;
@apply text-3xl font-bold text-white;
}
h2 {
@apply text-2xl font-bold pb-4 text-white;
@apply text-2xl font-bold text-white;
}
h3 {
@apply text-xl font-bold py-4 text-white;
@apply text-xl font-bold text-white;
}
h4 {
@apply text-base font-bold pb-4 text-white;
@apply text-base font-bold text-white;
}
a {
@apply text-neutral-400 hover:text-white text-sm link link-hover hover:bg-transparent;

View File

@@ -7,7 +7,7 @@
</div>
<div class="flex items-center gap-2">
<h1 class="pb-0">{{ __('auth.forgot_password') }}</h1>
<h1>{{ __('auth.forgot_password') }}</h1>
</div>
<div class="w-96">
<form action="/forgot-password" method="POST" class="flex flex-col gap-2">

View File

@@ -6,7 +6,7 @@
<x-version />
</div>
<div class="flex items-center gap-2">
<h1 class="pb-0">{{ __('auth.login') }}</h1>
<h1>{{ __('auth.login') }}</h1>
@if ($is_registration_enabled)
<a href="/register" class="flex justify-center pt-2 hover:no-underline">
<button

View File

@@ -6,7 +6,7 @@
<x-version />
</div>
<div class="flex items-center gap-2">
<h1 class="pb-0">{{ __('auth.register') }}</h1>
<h1>{{ __('auth.register') }}</h1>
<a href="/login" class="flex justify-center pt-2 hover:no-underline">
<button
class="normal-case rounded-none btn btn-sm btn-primary bg-coollabs-gradient">{{ __('auth.already_registered') }}</button>

View File

@@ -6,7 +6,7 @@
<x-version />
</div>
<div class="flex items-center gap-2">
<h1 class="pb-0">{{ __('auth.reset_password') }}</h1>
<h1>{{ __('auth.reset_password') }}</h1>
</div>
<div>
<form action="/reset-password" method="POST" class="flex flex-col gap-2">

View File

@@ -28,7 +28,7 @@
class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
@if (data_get($application, 'fqdn'))
<li>
<a class="text-xs hover:no-underline hover:bg-coollabs" target="_blank"
<a class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs" target="_blank"
href="{{ $application->fqdn }}">
{{ $application->fqdn }}
<x-external-link />
@@ -39,8 +39,8 @@
@foreach ($application->ports_mappings_array as $port)
@if (config('app.env') === 'local')
<li>
<a class="text-xs hover:no-underline hover:bg-coollabs" target="_blank"
href="http://localhost:{{ explode(':', $port)[0] }}">Port
<a class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs"
target="_blank" href="http://localhost:{{ explode(':', $port)[0] }}">Port
{{ explode(':', $port)[0] }}
<x-external-link />
</a>

View File

@@ -9,26 +9,26 @@
<div class="tooltip tooltip-warning" data-tip="{{ $tooltip }}">
@endisset
@if ($type === 'submit')
<button {{ $attributes }} type="submit" @if ($disabled !== null) disabled @endif wire:target="submit"
wire:loading.delay.shorter.class="loading"
<button {{ $attributes }} type="submit" @if ($disabled !== null) disabled @endif
@isset($confirm)
x-on:click="toggleConfirmModal('{{ $confirm }}', '{{ explode('(', $confirmAction)[0] }}')"
@endisset
@isset($confirmAction)
x-on:{{ explode('(', $confirmAction)[0] }}.window="$wire.{{ explode('(', $confirmAction)[0] }}"
@endisset>
<span wire:target="submit" wire:loading.delay class="loading loading-spinner"></span>
{{ $slot }}
</button>
@elseif($type === 'button')
<button {{ $attributes }} @if ($disabled !== null) disabled @endif type="button"
wire:target="{{ explode('(', $attributes->whereStartsWith('wire:click')->first())[0] }}"
wire:loading.delay.shorter.class="loading"
@isset($confirm)
x-on:click="toggleConfirmModal('{{ $confirm }}', '{{ explode('(', $confirmAction)[0] }}')"
@endisset
@isset($confirmAction)
x-on:{{ explode('(', $confirmAction)[0] }}.window="$wire.{{ explode('(', $confirmAction)[0] }}"
@endisset>
<span wire:target="{{ explode('(', $attributes->whereStartsWith('wire:click')->first())[0] }}"
wire:loading.delay class="loading loading-spinner"></span>
{{ $slot }}
</button>
@endif

View File

@@ -1,3 +1 @@
<div>
Loading...
</div>
<span class="loading loading-spinner"></span>

View File

@@ -4,13 +4,14 @@
'action' => 'delete',
])
<div x-cloak x-show="{{ $show }}" x-transition class="modal modal-open">
<div class="relative modal-box">
<div class="relative text-center rounded modal-box bg-coolgray-100">
<div class="pb-8 text-base font-bold text-white">{{ $message }}</div>
<div class="flex justify-end gap-4 text-xs">
<x-forms.button wire:click='{{ $action }}' x-on:click="{{ $show }} = false">
<div class="flex justify-center gap-4 text-xs">
<x-forms.button class="w-32" isWarning wire:click='{{ $action }}'
x-on:click="{{ $show }} = false">
Yes
</x-forms.button>
<x-forms.button x-on:click="{{ $show }} = false">No</x-forms.button>
<x-forms.button class="w-32" x-on:click="{{ $show }} = false">No</x-forms.button>
</div>
</div>
</div>

View File

@@ -1,20 +1,22 @@
@auth
<nav class="main-navbar">
<ul class="gap-2 p-1 pt-2 menu" title="Dashboard">
<li class="{{ request()->is('/') ? 'text-warning' : '' }}">
<a @if (!request()->is('/')) href="/" @endif>
<svg xmlns="http://www.w3.org/2000/svg" class="icon" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<ul class="gap-4 menu ">
<li>
<a class="hover:bg-transparent" @if (!request()->is('/')) href="/" @endif>
<svg xmlns="http://www.w3.org/2000/svg" class="{{ request()->is('/') ? 'text-warning icon' : 'icon' }}"
fill="none" viewBox="0 0 24 24" stroke="currentColor">
<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" />
</svg>
</a>
</li>
<li class="{{ request()->is('server/*') || request()->is('servers') ? 'text-warning' : '' }}" title="Servers">
<a @if (!request()->is('servers')) href="/servers" @endif>
<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">
<li title="Servers">
<a class="hover:bg-transparent" @if (!request()->is('servers')) href="/servers" @endif>
<svg xmlns="http://www.w3.org/2000/svg"
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"
stroke-linejoin="round">
<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="M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12" />
@@ -24,11 +26,12 @@
</svg>
</a>
</li>
<li class="{{ request()->is('project/*') || request()->is('projects') ? 'text-warning' : '' }}"
title="Projects">
<a @if (!request()->is('projects')) href="/projects" @endif>
<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">
<li title="Projects">
<a class="hover:bg-transparent" @if (!request()->is('projects')) href="/projects" @endif>
<svg xmlns="http://www.w3.org/2000/svg"
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"
stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 4l-8 4l8 4l8 -4l-8 -4" />
<path d="M4 12l8 4l8 -4" />
@@ -39,20 +42,24 @@
@if (auth()->user()->isPartOfRootTeam())
<li class="{{ request()->is('command-center') ? 'text-warning' : '' }}" title="Command Center">
<a @if (!request()->is('command-center')) href="/command-center" @endif>
<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">
<li title="Command Center">
<a class="hover:bg-transparent" @if (!request()->is('command-center')) href="/command-center" @endif>
<svg xmlns="http://www.w3.org/2000/svg"
class="{{ request()->is('command-center') ? 'text-warning icon' : 'icon' }}" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M5 7l5 5l-5 5" />
<path d="M12 19l7 0" />
</svg>
</a>
</li>
<li class="{{ request()->is('settings') ? 'text-warning' : ' ' }}" title="Settings">
<a @if (!request()->is('settings')) href="/settings" @endif>
<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">
<li title="Settings">
<a class="hover:bg-transparent" @if (!request()->is('settings')) href="/settings" @endif>
<svg xmlns="http://www.w3.org/2000/svg"
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-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<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" />
@@ -76,10 +83,9 @@
</svg>
</div>
</label>
<ul tabindex="0"
class="p-2 mt-3 text-white rounded shadow menu menu-compact dropdown-content bg-coolgray-200 w-52">
<ul tabindex="0" class="p-2 mt-3 rounded shadow menu menu-compact dropdown-content bg-coolgray-200 w-52">
<li>
<a class="hover:no-underline hover:bg-coollabs" href="/profile">
<a class="text-white rounded-none hover:no-underline hover:bg-coollabs" href="/profile">
<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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
@@ -90,7 +96,7 @@
</a>
</li>
<li>
<a class="hover:no-underline hover:bg-coollabs" href="/profile/team">
<a class="text-white rounded-none hover:no-underline hover:bg-coollabs" href="/profile/team">
<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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
@@ -106,9 +112,9 @@
<form action="/logout" method="POST">
<li>
@csrf
<button class="text-sm hover:bg-coollabs"> <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">
<button class="text-sm text-white rounded-none hover:bg-coollabs"> <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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M13 12v.01" />
<path d="M3 21h18" />

View File

@@ -0,0 +1,22 @@
<div class="pb-6">
<h1>Server</h1>
<div class="text-sm breadcrumbs pb-11">
<ul>
<li>{{ data_get($server, 'name') }}</li>
</ul>
</div>
<nav class="flex items-center gap-4 py-2 border-b-2 border-solid border-coolgray-200">
<a class="{{ request()->routeIs('server.show') ? 'text-white' : '' }}"
href="{{ route('server.show', [
'server_uuid' => Route::current()->parameters()['server_uuid'],
]) }}">
<button>General</button>
</a>
<a class="{{ request()->routeIs('server.proxy') ? 'text-white' : '' }}"
href="{{ route('server.proxy', [
'server_uuid' => Route::current()->parameters()['server_uuid'],
]) }}">
<button>Proxy</button>
</a>
</nav>
</div>

View File

@@ -0,0 +1,19 @@
<div class="pb-6">
<h1>Team</h1>
<div class="text-sm breadcrumbs pb-11">
<ul>
<li>{{ session('currentTeam.name') }}</li>
</ul>
</div>
<nav class="flex items-center gap-4 py-2 border-b-2 border-solid border-coolgray-200">
<a class="{{ request()->routeIs('team.show') ? 'text-white' : '' }}" href="{{ route('team.show') }}">
<button>Members</button>
</a>
<a class="{{ request()->routeIs('team.notifications') ? 'text-white' : '' }}"
href="{{ route('team.notifications') }}">
<button>Notifications</button>
</a>
<div class="flex-1"></div>
<livewire:switch-team />
</nav>
</div>

View File

@@ -1,6 +1,6 @@
<x-layout>
<h1>Dashboard</h1>
<div class="">
<h1 class="pb-2">Dashboard</h1>
<div class="text-sm ">
Something useful will be here.
</div>
</x-layout>

View File

@@ -1,23 +1,11 @@
<div class="flex gap-10 text-xs text-white" x-data="{ visible: @entangle('visible') }">
<button x-cloak x-show="!visible"
class="gap-2 text-white normal-case btn btn-ghost hover:no-underline bg-coollabs hover:bg-coollabs-100"
wire:click='upgrade'>
<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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 20.777a8.942 8.942 0 0 1 -2.48 -.969" />
<path d="M14 3.223a9.003 9.003 0 0 1 0 17.554" />
<path d="M4.579 17.093a8.961 8.961 0 0 1 -1.227 -2.592" />
<path d="M3.124 10.5c.16 -.95 .468 -1.85 .9 -2.675l.169 -.305" />
<path d="M6.907 4.579a8.954 8.954 0 0 1 3.093 -1.356" />
<path d="M12 9l-2 3h4l-2 3" />
</svg>Force Upgrade
</button>
<x-forms.button x-cloak x-show="!visible" wire:click='upgrade'>
Force Upgrade
</x-forms.button>
<template x-if="visible">
<div class="bg-coollabs-gradient">
<svg xmlns="http://www.w3.org/2000/svg" class="w-10 h-10 mx-auto text-pink-500 lds-heart"
viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" class="w-10 h-10 mx-auto text-pink-500 lds-heart" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<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" />
</svg> Upgrading, please wait...

View File

@@ -1,19 +1,16 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2">
<h3>Discord</h3>
<x-forms.button class="w-16 mt-4" type="submit">
<h2>Discord</h2>
<x-forms.button type="submit">
Save
</x-forms.button>
</div>
<div class="flex flex-col gap-2 xl:flex-row w-96">
<x-forms.checkbox instantSave id="model.extra_attributes.discord_active" label="Notification Enabled" />
</div>
<div class="flex flex-col gap-2 xl:flex-row w-96">
<x-forms.input required id="model.extra_attributes.discord_webhook" label="Webhook" />
</div>
<div>
</div>
<x-forms.input type="string"
helper="Generate a webhook in Discord.<br>Example: https://discord.com/api/webhooks/...." required
id="model.extra_attributes.discord_webhook" label="Webhook" />
</form>
</div>

View File

@@ -1,36 +1,43 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col mt-2">
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2">
<h3>E-mail (SMTP)</h3>
<x-forms.button class="w-16 mt-4" type="submit">
<h2>Email</h2>
<x-forms.button type="submit">
Save
</x-forms.button>
</div>
<div class="flex flex-col w-96">
<x-forms.checkbox instantSave id="model.extra_attributes.smtp_active" label="Notification Enabled" />
</div>
<x-forms.input id="model.extra_attributes.test_notification_recipients" label="Test Notification Recipient(s)"
helper="Emails separated by comma." />
<div class="flex flex-col gap-2 xl:flex-row">
<div class="flex flex-col w-96">
<x-forms.input required id="model.extra_attributes.recipients" helper="Emails separated by comma."
label="Recipient(s)" />
</div>
<div class="flex gap-2">
<x-forms.input required id="model.extra_attributes.recipients"
helper="Email list to send the all notifications to, separated by comma." label="Recipient(s)" />
<x-forms.input id="model.extra_attributes.test_notification_recipients"
label="Test Notification Recipient(s)"
helper="Email list to send the test notification to, separated by comma." />
</div>
<div class="flex flex-col gap-2 xl:flex-row">
<div class="flex flex-col w-96">
<x-forms.input required id="model.extra_attributes.smtp_host" label="Host" />
<x-forms.input required id="model.extra_attributes.smtp_port" label="Port" />
<x-forms.input id="model.extra_attributes.smtp_encryption" label="Encryption" />
<x-forms.input required id="model.extra_attributes.smtp_host" helper="SMTP Hostname"
placeholder="smtp.mailgun.org" label="Host" />
<x-forms.input required id="model.extra_attributes.smtp_port" helper="SMTP Port" placeholder="587"
label="Port" />
<x-forms.input helper="If SMTP through SSL, set it to 'tls'." placeholder="tls"
id="model.extra_attributes.smtp_encryption" label="Encryption" />
</div>
<div class="flex flex-col w-96">
<x-forms.input id="model.extra_attributes.smtp_username" label="Username" />
<x-forms.input id="model.extra_attributes.smtp_password" label="Password" />
<x-forms.input id="model.extra_attributes.smtp_timeout" label="Timeout" />
<x-forms.input id="model.extra_attributes.smtp_username" helper="SMTP Username" label="Username" />
<x-forms.input type="password" helper="SMTP Password" id="model.extra_attributes.smtp_password"
label="Password" />
<x-forms.input id="model.extra_attributes.smtp_timeout" helper="Timeout value for sending emails."
label="Timeout" />
</div>
<div class="flex flex-col w-96">
<x-forms.input required id="model.extra_attributes.from_address" label="From Address" />
<x-forms.input required id="model.extra_attributes.from_name" label="From Name" />
<x-forms.input required id="model.extra_attributes.from_name" helper="Name used in emails."
label="From Name" />
<x-forms.input required id="model.extra_attributes.from_address" helper="Email address used in emails."
label="From Address" />
</div>
</div>
</form>

View File

@@ -1,4 +1,7 @@
<x-forms.button isHighlighted class="mt-4 text-white normal-case btn btn-xs no-animation btn-primary"
wire:click="sendTestNotification">
Send Test Notifications
</x-forms.button>
<div class="flex items-center gap-2">
<h2>Notifications</h2>
<x-forms.button isHighlighted class="text-white normal-case btn btn-xs no-animation btn-primary"
wire:click="sendTestNotification">
Send Test Notifications
</x-forms.button>
</div>

View File

@@ -1,9 +1,10 @@
<div x-data="{ deleteApplication: false }">
<h2 class="pb-0">Danger Zone</h2>
<h2>Danger Zone</h2>
<div class="text-sm">Woah. I hope you know what are you doing.</div>
<h3 class="pb-0">Delete Application</h3>
<div class="text-sm">This will stop your containers, delete all related data, etc. Beware! There is no coming back!
<h3 class="pt-4">Delete Application</h3>
<div class="pb-4 text-sm">This will stop your containers, delete all related data, etc. Beware! There is no coming
back!
</div>
<x-naked-modal show="deleteApplication" />
<x-forms.button x-on:click.prevent="deleteApplication = true">Delete</x-forms.button>
<x-forms.button x-on:click.prevent="deleteApplication = true">Yes, please, delete it.</x-forms.button>
</div>

View File

@@ -8,13 +8,13 @@
<ul tabindex="0"
class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<li>
<div class="hover:bg-coollabs" wire:click='deploy'>Restart</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'>Restart</div>
</li>
<li>
<div class="hover:bg-coollabs" wire:click='deploy(true)'>Force deploy without cache</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true)'>Force deploy without cache</div>
</li>
<li>
<div class="hover:bg-red-500" wire:click='stop'>Stop</div>
<div class="rounded-none hover:bg-red-500" wire:click='stop'>Stop</div>
</li>
</ul>
</div>
@@ -29,10 +29,10 @@
<ul tabindex="0"
class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<li>
<div class="hover:bg-coollabs" wire:click='deploy'>Deploy</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'>Deploy</div>
</li>
<li>
<div class="hover:bg-coollabs" wire:click='deploy(true)'>Deploy without cache</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true)'>Deploy without cache</div>
</li>
</ul>
</div>

View File

@@ -1,6 +1,6 @@
<div>
<div class="pt-4">
<h2>Logs</h2>
<livewire:project.application.deployment-navbar :activity="$activity" :application="$application" :deployment_uuid="$deployment_uuid" />
<h3 class="pb-0">Logs</h3>
@if (data_get($activity, 'properties.status') === 'in_progress')
<div class="pt-2 text-sm">Deployment is
<span class="text-warning">{{ Str::headline(data_get($activity, 'properties.status')) }}</span>. Logs will

View File

@@ -1,5 +1,4 @@
<div>
<h3>Actions</h3>
<div class="py-4">
@if (data_get($activity, 'properties.status') === 'in_progress')
<x-forms.button wire:click.prevent="cancel">Cancel deployment</x-forms.button>
@else

View File

@@ -1,61 +1,62 @@
<div class="flex flex-col gap-2" wire:init='load_deployments'
@if ($skip == 0) wire:poll.5000ms='reload_deployments' @endif>
<div>
<h3>Actions</h3>
@if (count($deployments) > 0)
<h2 class="pt-4">Deployments <span class="text-xs">({{ $deployments_count }})</span></h2>
@if ($show_next)
<x-forms.button isHighlighted wire:click="load_deployments({{ $default_take }})">Load Previous
Deployments</x-forms.button>
<x-forms.button isHighlighted wire:click="load_deployments({{ $default_take }})">Show More
</x-forms.button>
@else
<x-forms.button disabled>No More Deployments</x-forms.button>
<x-forms.button disabled>Show More
</x-forms.button>
@endif
</div>
<h3>Deployments <span class="text-xs">({{ $deployments_count }})</span></h3>
@foreach ($deployments as $deployment)
<a @class([
'bg-coolgray-200 p-2 border-l border-dashed transition-colors hover:no-underline',
'cursor-not-allowed hover:bg-coolgray-200' =>
data_get($deployment, 'status') === 'queued' ||
data_get($deployment, 'status') === 'cancelled by system',
'border-warning hover:bg-warning hover:text-black' =>
data_get($deployment, 'status') === 'in_progress',
'border-error hover:bg-error' =>
data_get($deployment, 'status') === 'error',
'border-success hover:bg-success' =>
data_get($deployment, 'status') === 'finished',
]) @if (data_get($deployment, 'status') !== 'cancelled by system' && data_get($deployment, 'status') !== 'queued')
href="{{ $current_url . '/' . data_get($deployment, 'deployment_uuid') }}"
@endif
class="hover:no-underline">
<div class="flex flex-col justify-start">
<div>
{{ $deployment->id }} <span class="text-sm text-warning">></span> {{ $deployment->deployment_uuid }} <span
class="text-sm text-warning">></span>
{{ $deployment->status }}
</div>
@if (data_get($deployment, 'pull_request_id'))
@foreach ($deployments as $deployment)
<a @class([
'bg-coolgray-200 p-2 border-l border-dashed transition-colors hover:no-underline',
'cursor-not-allowed hover:bg-coolgray-200' =>
data_get($deployment, 'status') === 'queued' ||
data_get($deployment, 'status') === 'cancelled by system',
'border-warning hover:bg-warning hover:text-black' =>
data_get($deployment, 'status') === 'in_progress',
'border-error hover:bg-error' =>
data_get($deployment, 'status') === 'error',
'border-success hover:bg-success' =>
data_get($deployment, 'status') === 'finished',
]) @if (data_get($deployment, 'status') !== 'cancelled by system' && data_get($deployment, 'status') !== 'queued')
href="{{ $current_url . '/' . data_get($deployment, 'deployment_uuid') }}"
@endif
class="hover:no-underline">
<div class="flex flex-col justify-start">
<div>
Pull Request #{{ data_get($deployment, 'pull_request_id') }}
@if (data_get($deployment, 'is_webhook'))
(Webhook)
@endif
{{ $deployment->id }} <span class="text-sm text-warning">></span> {{ $deployment->deployment_uuid }}
<span class="text-sm text-warning">></span>
{{ $deployment->status }}
</div>
@elseif (data_get($deployment, 'is_webhook'))
<div>Webhook (sha
@if (data_get($deployment, 'commit'))
{{ data_get($deployment, 'commit') }})
@else
HEAD)
@endif
@if (data_get($deployment, 'pull_request_id'))
<div>
Pull Request #{{ data_get($deployment, 'pull_request_id') }}
@if (data_get($deployment, 'is_webhook'))
(Webhook)
@endif
</div>
@elseif (data_get($deployment, 'is_webhook'))
<div>Webhook (sha
@if (data_get($deployment, 'commit'))
{{ data_get($deployment, 'commit') }})
@else
HEAD)
@endif
</div>
@endif
<div class="flex flex-col" x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')">
<div>Finished <span x-text="measure_since_started()">0s</span> in <span class="font-bold"
x-text="measure_finished_time()">0s</span></div>
</div>
@endif
<div class="flex flex-col" x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')">
<div>Finished <span x-text="measure_since_started()">0s</span> in <span class="font-bold"
x-text="measure_finished_time()">0s</span></div>
</div>
</div>
</a>
</a>
@endforeach
@else
<span wire:loading.remove wire:target='load_deployments' class="loading loading-spinner"></span>
@endif
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/utc.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/relativeTime.js"></script>

View File

@@ -1,5 +1,5 @@
<div>
<h2 class="pb-0">Destination</h2>
<h2>Destination</h2>
<div class="text-sm">The destination server / network where your application will be deployed to.</div>
<div class="py-4">
<p>Server: {{ data_get($destination, 'server.name') }}</p>

View File

@@ -1,6 +1,6 @@
<div class="flex flex-col gap-2">
<div>
<h2 class="pb-0">Environment Variables</h2>
<h2>Environment Variables</h2>
<div class="text-sm">Environment (secrets) configuration. You can set variables for your Preview Deployments as
well
here.</div>

View File

@@ -1,7 +1,7 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h2 class="pb-0">General</h2>
<div class="flex items-center gap-2">
<h2>General</h2>
<x-forms.button type="submit">
Save
</x-forms.button>

View File

@@ -1,6 +1,6 @@
<form wire:submit.prevent='submit'>
<div class="flex gap-2">
<h2 class="pb-0">Previews Deployments</h2>
<div class="flex items-center gap-2">
<h2>Previews Deployments</h2>
<x-forms.button type="submit">Save</x-forms.button>
<x-forms.button wire:click="resetToDefault">Reset to default</x-forms.button>
</div>

View File

@@ -2,7 +2,7 @@
<livewire:project.application.preview.form :application="$application" />
<h3>Pull Requests on Git</h3>
<div>
<x-forms.button wire:click="load_prs">Load Opened Pull Requests
<x-forms.button wire:click="load_prs">Load Pull Requests (open)
</x-forms.button>
@isset($rate_limit_remaining)
<div class="pt-1 text-sm">Requests remaning till rate limited by Git: {{ $rate_limit_remaining }}</div>

View File

@@ -1,23 +1,26 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h2 class="pb-0">Resource Limits</h2>
<div class="flex items-center gap-2 ">
<h2>Resource Limits</h2>
<x-forms.button type='submit'>Save</x-forms.button>
</div>
<div class="text-sm">Limit your container resources by CPU & memory.</div>
<h3>Limit CPUs</h3>
<x-forms.input placeholder="1.5" label="Number of CPUs" id="application.limits_cpus" />
<x-forms.input placeholder="0-2" label="CPU sets to use" id="application.limits_cpuset" />
<x-forms.input placeholder="1024" label="CPU Weight" id="application.limits_cpu_shares" />
<h3>Limit Memory</h3>
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Soft Memory Limit"
id="application.limits_memory_reservation" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Memory Limit"
id="application.limits_memory" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Swap Limit"
id="application.limits_memory_swap" />
<x-forms.input placeholder="0-100" type="number" min="0" max="100" label="Swappiness"
id="application.limits_memory_swappiness" />
<h3 class="pt-4">Limit CPUs</h3>
<div class="flex gap-2">
<x-forms.input placeholder="1.5" label="Number of CPUs" id="application.limits_cpus" />
<x-forms.input placeholder="0-2" label="CPU sets to use" id="application.limits_cpuset" />
<x-forms.input placeholder="1024" label="CPU Weight" id="application.limits_cpu_shares" />
</div>
<h3 class="pt-4">Limit Memory</h3>
<div class="flex gap-2">
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Soft Memory Limit"
id="application.limits_memory_reservation" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Memory Limit"
id="application.limits_memory" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Swap Limit"
id="application.limits_memory_swap" />
<x-forms.input placeholder="0-100" type="number" min="0" max="100" label="Swappiness"
id="application.limits_memory_swappiness" />
</div>
</form>
</div>

View File

@@ -1,6 +1,6 @@
<div x-init="$wire.loadImages">
<div class="flex gap-2">
<h2 class="pb-0">Rollback</h2>
<div class="flex items-center gap-2">
<h2>Rollback</h2>
<x-forms.button isHighlighted wire:click='loadImages'>Reload Available Images</x-forms.button>
</div>
<div class="pb-4 text-sm">You can easily rollback to a previously built image quickly.</div>

View File

@@ -1,7 +1,7 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2">
<h2 class="pb-0">Source</h2>
<h2>Source</h2>
<x-forms.button type="submit">Save</x-forms.button>
</div>
<div class="text-sm">Code source of your application.</div>

View File

@@ -1,5 +1,5 @@
<div>
<h2 class="pb-0">Storages</h2>
<h2>Storages</h2>
<div class="text-sm">Persistent storage to preserve data between deployments.</div>
<div class="flex flex-col gap-2 py-4">
@forelse ($application->persistentStorages as $storage)

View File

@@ -12,7 +12,7 @@
@endif
@endforeach
</x-forms.select>
<x-forms.button class="btn-xl" type="submit">Run</x-forms.button>
<x-forms.button class="h-8" type="submit">Run</x-forms.button>
</form>
<div class="container w-full pt-10 mx-auto">
<livewire:activity-monitor />

View File

@@ -37,7 +37,7 @@
@endif
</div>
</div>
<h3>Quick Actions</h3>
<h3 class="pt-8 pb-4">Quick Actions</h3>
<div class="flex items-center gap-2">
<x-forms.button wire:click.prevent='validateServer'>
@if ($server->settings->is_validated)

View File

@@ -3,7 +3,7 @@
message='Are you sure you would like to stop the proxy? All resources will be unavailable.' />
@if ($server->settings->is_validated)
<div class="flex items-center gap-2 mb-2">
<h2 class="pb-0">Proxy</h2>
<h2>Proxy</h2>
@if ($server->extra_attributes->proxy_type)
<x-forms.button isHighlighted wire:click.prevent="installProxy">
Start/Reconfigure Proxy
@@ -16,8 +16,6 @@
$server->extra_attributes->last_saved_proxy_settings !== $server->extra_attributes->last_applied_proxy_settings)
<div class="text-red-500">Configuration out of sync.</div>
@endif
</div>
@endif
@if ($server->extra_attributes->proxy_status === 'running')

View File

@@ -1,12 +1,12 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h1 class="pb-2">Settings</h1>
<form wire:submit.prevent='submit' class="flex flex-col pb-8">
<div class="flex items-center gap-2">
<h1>Settings</h1>
<x-forms.button type="submit">
Save
</x-forms.button>
</div>
<div class="pb-4 text-sm">Instance wide settings for Coolify.</div>
<div class="pt-2 pb-4 text-sm">Instance wide settings for Coolify.</div>
<div class="flex flex-col gap-2">
<div class="flex gap-2">
<x-forms.input id="settings.fqdn" label="Coolify's Domain" />
@@ -28,5 +28,4 @@
{{-- <x-forms.checkbox instantSave id="is_https_forced" label="Force https?" /> --}}
<x-forms.checkbox instantSave id="do_not_track" label="Do Not Track" />
</div>
</div>

View File

@@ -1,9 +1,8 @@
<div class="pt-4">
<h3>Switch Team</h3>
<div class="flex gap-2">
@foreach (auth()->user()->otherTeams() as $team)
<x-forms.button isHighlighted wire:key="{{ $team->id }}" wire:click="switch_to('{{ $team->id }}')">
{{ $team->name }}</x-forms.button>
<div>
<x-forms.select wire:model="selectedTeamId" class="w-64 select-xs">
<option value="default" disabled selected>Switch team</option>
@foreach (auth()->user()->teams as $team)
<option value="{{ $team->id }}">{{ $team->name }}</option>
@endforeach
</div>
</x-forms.select>
</div>

View File

@@ -0,0 +1,10 @@
<tr class="border-coolgray-200">
<th class="text-warning">{{ $member->id }}</th>
<td>{{ $member->name }}</td>
<td>{{ $member->email }}</td>
<td>
@if ($member->id !== auth()->user()->id)
<x-forms.button class="border-none">Remove</x-forms.button>
@endif
</td>
</tr>

View File

@@ -1,5 +1,5 @@
<x-layout>
<h1 class="pb-0">Configuration</h1>
<h1>Configuration</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li><a href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
@@ -43,9 +43,6 @@
<a :class="activeTab === 'danger' && 'text-white'"
@click.prevent="activeTab = 'danger'; window.location.hash = 'danger'" href="#">Danger Zone
</a>
{{-- <a :class="activeTab === 'previews' && 'text-white'"
@click.prevent="activeTab = 'previews'; window.location.hash = 'previews'" href="#">Previews
</a> --}}
</div>
<div class="w-full pl-8">
<div x-cloak x-show="activeTab === 'general'" class="h-full">

View File

@@ -1,5 +1,5 @@
<x-layout>
<h1 class="pb-0">Deployments</h1>
<h1>Deployments</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>`
<li><a

View File

@@ -1,7 +1,7 @@
<x-layout>
<div class="flex flex-col">
<div class="flex items-center gap-2">
<h1 class="pb-0">Resources</h1>
<h1>Resources</h1>
<livewire:project.delete-environment :environment_id="$environment->id" :resource_count="$environment->applications->count()" />
</div>
<div class="pb-10 text-sm breadcrumbs">

View File

@@ -1,6 +1,6 @@
<x-layout>
<div class="flex items-center gap-2">
<h1 class="pb-0">Environments</h1>
<h1>Environments</h1>
<livewire:project.delete-project :project_id="$project->id" :resource_count="$project->applications->count()" />
</div>
<div class="pb-10 text-sm breadcrumbs">

View File

@@ -1,5 +1,5 @@
<x-layout>
<h1 class="py-0">Projects</h1>
<h1>Projects</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>

View File

@@ -0,0 +1,4 @@
<x-layout>
<x-server.navbar :server="$server" />
<livewire:server.proxy :server="$server" />
</x-layout>

View File

@@ -1,25 +1,4 @@
<x-layout>
<h1 class="pb-0">Server</h1>
<div class="text-sm breadcrumbs">
<ul>
<li>{{ data_get($server, 'name') }}</li>
</ul>
</div>
<div x-data="{ activeTab: window.location.hash ? window.location.hash.substring(1) : 'general' }" class="flex pt-10">
<div class="flex flex-col gap-4 min-w-fit">
<a :class="activeTab === 'general' && 'text-white'"
@click.prevent="activeTab = 'general'; window.location.hash = 'general'" href="#">General</a>
<a :class="activeTab === 'proxy' && 'text-white'"
@click.prevent="activeTab = 'proxy'; window.location.hash = 'proxy'" href="#">Proxy
</a>
</div>
<div class="w-full pl-8">
<div x-cloak x-show="activeTab === 'general'">
<livewire:server.form :server_id="$server->id" />
</div>
<div x-cloak x-show="activeTab === 'proxy'">
<livewire:server.proxy :server="$server" />
</div>
</div>
</div>
<x-server.navbar :server="$server" />
<livewire:server.form :server_id="$server->id" />
</x-layout>

View File

@@ -3,8 +3,4 @@
@if (auth()->user()->isPartOfRootTeam())
<livewire:force-upgrade />
@endif
<h3 class="pb-0">Notification</h3>
<div class="pb-4 text-sm">Notification (email, discord, etc) settings for Coolify.</div>
<h4>Email</h4>
<livewire:settings.email :model="$settings" />
</x-layout>

View File

@@ -1,12 +0,0 @@
<x-layout>
<h1>Team</h1>
<p>Current Team: {{ session('currentTeam.name') }}</p>
@if (auth()->user()->otherTeams()->count() > 0)
<livewire:switch-team />
@endif
<h2>Notifications</h2>
<livewire:notifications.test :model="session('currentTeam')" />
<livewire:notifications.email-settings :model="session('currentTeam')" />
<livewire:notifications.discord-settings :model="session('currentTeam')" />
<div class="h-12"></div>
</x-layout>

View File

@@ -0,0 +1,19 @@
<x-layout>
<x-team.navbar :team="session('currentTeam')" />
{{-- <livewire:notifications.test :model="session('currentTeam')" /> --}}
<div x-data="{ activeTab: window.location.hash ? window.location.hash.substring(1) : 'email' }" class="flex h-full">
<div class="flex flex-col gap-4 min-w-fit">
<a :class="activeTab === 'email' && 'text-white'"
@click.prevent="activeTab = 'email'; window.location.hash = 'email'" href="#">Email</a>
<a :class="activeTab === 'discord' && 'text-white'"
@click.prevent="activeTab = 'discord'; window.location.hash = 'discord'" href="#">Discord</a>
</div>
<div class="w-full pl-8">
<div x-cloak x-show="activeTab === 'email'" class="h-full">
<livewire:notifications.email-settings :model="session('currentTeam')" />
</div>
<div x-cloak x-show="activeTab === 'discord'">
<livewire:notifications.discord-settings :model="session('currentTeam')" />
</div>
</div>
</x-layout>

View File

@@ -0,0 +1,28 @@
<x-layout>
<x-team.navbar :team="session('currentTeam')" />
<h2>Members</h2>
<div class="overflow-x-auto">
<table class="table">
<thead>
<tr class="text-warning border-coolgray-200">
<th></th>
<th>Name</th>
<th>Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (session('currentTeam')->members as $member)
<livewire:team.member :member="$member" :wire:key="$member->id" />
@endforeach
</tbody>
</table>
</div>
<div class="py-4">
<h2>Invite a new member</h2>
<form class="flex items-center gap-2">
<x-forms.input type="email" name="email" placeholder="Email" />
<x-forms.button isHighlighted>Invite</x-forms.button>
</form>
</div>
</x-layout>