ui updates

This commit is contained in:
Andras Bacsai 2023-06-07 21:44:16 +02:00
parent 5abe308a97
commit 774b8d987b
29 changed files with 505 additions and 392 deletions

View File

@ -27,7 +27,7 @@ input[type="text"],
[type="number"],
[type="email"],
[type="password"] {
@apply read-only:opacity-40;
@apply read-only:bg-coolgray-200/50 read-only:text-opacity-25;
}
.label-text,
label {
@ -40,9 +40,6 @@ textarea {
select {
@apply select select-sm text-sm disabled:bg-coolgray-200 border-none disabled:opacity-50 font-normal placeholder:text-neutral-700 text-white rounded-none;
}
.breadcrumbs > ul > li::before {
@apply text-warning opacity-100;
}
.loading {
@apply w-4 text-warning;
}

View File

@ -1,6 +1,6 @@
<template>
<Transition name="fade">
<div class="z-10">
<div>
<div class="flex items-center p-1 px-2 overflow-hidden transition-all transform rounded cursor-pointer bg-coolgray-200"
@click="showCommandPalette = true">
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 icon" viewBox="0 0 24 24" stroke-width="2"
@ -12,9 +12,9 @@
<span class="ml-2 kbd-custom">/</span>
</div>
<div class="relative" role="dialog" aria-modal="true" v-if="showCommandPalette" @keyup.esc="resetState">
<div class="fixed inset-0 transition-opacity bg-opacity-75 bg-coolgray-100" @click.self="resetState">
<div class="fixed inset-0 transition-opacity bg-opacity-90 bg-coolgray-100" @click.self="resetState">
</div>
<div class="fixed inset-0 w-3/5 p-4 mx-auto overflow-y-auto sm:p-6 md:px-20 min-w-fit"
<div class="fixed inset-0 p-4 mx-auto overflow-y-auto md:w-[70rem] sm:p-10 md:px-20"
@click.self="resetState">
<div class="overflow-hidden transition-all transform bg-coolgray-200 ring-1 ring-black ring-opacity-5">
<div class="relative">
@ -31,8 +31,8 @@
aria-expanded="false" aria-controls="options">
</div>
<ul class="px-4 pb-2 overflow-y-auto lg:max-h-screen max-h-80 scroll-py-10 scroll-pb-2 scrollbar"
id="options" role="listbox">
<ul class="px-4 pb-2 overflow-y-auto max-h-96 scroll-py-10 scroll-pb-2 scrollbar" id="options"
role="listbox">
<li v-if="sequenceState.sequence.length !== 0">
<h2 v-if="sequenceState.sequence[sequenceState.currentActionIndex] && possibleSequences[sequenceState.sequence[sequenceState.currentActionIndex]]"
class="mt-4 mb-2 text-xs font-semibold text-neutral-500">{{

View File

@ -1,37 +1,38 @@
<x-layout-simple>
<div class="flex items-center justify-center h-screen">
<div class="w-1/2 min-w-fit">
<div class="w-96 min-w-fit">
<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-extrabold tracking-tight text-center text-white">Coolify</div>
<x-version />
</div>
<div class="flex items-center gap-2">
<h1>{{ __('auth.login') }}</h1>
@if ($is_registration_enabled)
<a href="/register"
class="text-xs text-center text-white normal-case bg-transparent border-none rounded no-animation hover:no-underline btn btn-sm bg-coollabs-gradient">
{{ __('auth.register_now') }}
</a>
@endif
</div>
<div>
<form action="/login" method="POST" class="flex flex-col gap-2">
@csrf
@env('local')
<x-forms.input required value="test@example.com" type="email" name="email"
label="{{ __('input.email') }}" autofocus />
<x-forms.input value="test@example.com" type="email" name="email" label="{{ __('input.email') }}"
autofocus />
<x-forms.input value="password" type="password" name="password"
label="{{ __('input.password') }}" />
<a href="/forgot-password" class="text-xs">
{{ __('auth.forgot_password') }}?
</a>
<x-forms.input required value="password" type="password" name="password"
label="{{ __('input.password') }}" />
@else
<x-forms.input required type="email" name="email" label="{{ __('input.email') }}" autofocus />
<x-forms.input required type="password" name="password" label="{{ __('input.password') }}" />
<x-forms.input type="email" name="email" label="{{ __('input.email') }}" autofocus />
<x-forms.input type="password" name="password" label="{{ __('input.password') }}" />
@endenv
<x-forms.button type="submit">{{ __('auth.login') }}</x-forms.button>
@if (!$is_registration_enabled)
@if ($is_registration_enabled)
<a href="/register"
class="text-xs text-center text-white normal-case bg-transparent border-none rounded no-animation hover:no-underline btn btn-sm bg-coollabs-gradient">
{{ __('auth.register_now') }}
</a>
@else
<div class="text-sm text-center">{{ __('auth.registration_disabled') }}</div>
@endif
@if ($errors->any())

View File

@ -1,12 +1,12 @@
<x-layout>
<h1>Command Center</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Execute commands on your servers without leaving the browser.
</li>
</ul>
</div>
</ol>
</nav>
@if ($servers->count() > 0)
<livewire:run-command :servers="$servers" />
@else

View File

@ -16,12 +16,12 @@
<button>Deployments</button>
</a>
<div class="flex-1"></div>
<div class="dropdown dropdown-bottom dropdown-hover">
<div class="group">
<label tabindex="0" class="flex items-center gap-2 text-sm cursor-pointer hover:text-white"> Links
<x-chevron-down />
</label>
<ul tabindex="0"
class="text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<div class="absolute hidden group-hover:block ">
<ul tabindex="0" class="text-xs text-white normal-case rounded min-w-max menu bg-coolgray-200">
<li>
<a target="_blank" class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs"
href="{{ $application->gitBranchLocation }}">
@ -33,8 +33,9 @@ class="text-xs text-white normal-case rounded min-w-max dropdown-content menu bg
<li>
<a class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs" target="_blank"
href="{{ $application->fqdn }}">
<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">
<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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l6 -6" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />

View File

@ -9,24 +9,23 @@
'disabled' => null,
])
<label {{ $attributes->merge(['class' => 'flex cursor-pointer w-64 label']) }}>
<div class="label-text">
<div class="flex gap-1 label-text">
@if ($label)
{{ $label }}
@else
{{ $id }}
@endif
@if ($helper)
<div class="-mb-1 dropdown dropdown-right dropdown-hover">
<label tabindex="0" class="cursor-pointer text-warning">
<div class="group">
<div class="cursor-pointer text-warning">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
class="w-4 h-4 stroke-current">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</label>
<div tabindex="0"
class="border rounded shadow border-coolgray-400 card compact dropdown-content bg-coolgray-200 w-96">
<div class="card-body">
</div>
<div class="absolute hidden text-xs group-hover:block border-coolgray-400 bg-coolgray-500">
<div class="p-4 card-body">
{!! $helper !!}
</div>
</div>

View File

@ -2,6 +2,7 @@
'id' => $attributes->has('id'),
'type' => $attributes->get('type') ?? 'text',
'label' => $attributes->has('label'),
'readonly' => null,
'required' => null,
'disabled' => null,
'helper' => $attributes->has('helper'),
@ -10,23 +11,22 @@
<div {{ $attributes->merge(['class' => 'w-full form-control']) }}>
@if ($label)
<label class="label">
<span class="label-text">
<span class="flex gap-1 label-text">
{{ $label }}
@if ($required)
<span class="text-warning">*</span>
@endif
@if ($helper)
<div class="-mb-1 dropdown dropdown-right dropdown-hover">
<label tabindex="0" class="cursor-pointer text-warning">
<div class="group">
<div class="cursor-pointer text-warning">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
class="w-4 h-4 stroke-current">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</label>
<div tabindex="0"
class="border rounded shadow border-coolgray-400 card compact dropdown-content bg-coolgray-200 w-96">
<div class="card-body">
</div>
<div class="absolute hidden text-xs group-hover:block border-coolgray-400 bg-coolgray-500">
<div class="p-4 card-body">
{!! $helper !!}
</div>
</div>
@ -38,7 +38,7 @@ class="border rounded shadow border-coolgray-400 card compact dropdown-content b
<input type={{ $type }}
@if ($id) name={{ $id }} wire:model.defer={{ $id }} @endisset
@if ($disabled !== null) disabled @endif
@if ($required !== null) required @endif
@if ($required !== null) required @endif @if ($readonly !== null) readonly @endif
@if (!$noDirty && $id) wire:dirty.class="input-warning" @endif {{ $attributes }} />
@error($id)
<label class="label">

View File

@ -17,17 +17,16 @@
<span class="text-warning">*</span>
@endif
@if ($helper)
<div class="-mb-1 dropdown dropdown-right dropdown-hover">
<label tabindex="0" class="cursor-pointer text-warning">
<div class="group">
<div class="cursor-pointer text-warning">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
class="w-4 h-4 stroke-current">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</label>
<div tabindex="0"
class="border rounded shadow border-coolgray-400 card compact dropdown-content bg-coolgray-200 w-96">
<div class="card-body">
</div>
<div class="absolute hidden text-xs group-hover:block border-coolgray-400 bg-coolgray-500">
<div class="p-4 card-body">
{!! $helper !!}
</div>
</div>

View File

@ -20,18 +20,17 @@
<span class="text-warning">*</span>
@endif
@if ($helper)
<div class="dropdown dropdown-right">
<label tabindex="0" class="btn btn-circle btn-ghost btn-xs text-warning">
<div class="group">
<div class="cursor-pointer text-warning">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
class="w-4 h-4 stroke-current">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</label>
<div tabindex="0"
class="w-64 border-2 shadow border-coolgray-500 card compact dropdown-content bg-coolgray-200 ">
<div class="card-body">
{{ $helper }}
</div>
<div class="absolute hidden text-xs group-hover:block border-coolgray-400 bg-coolgray-500">
<div class="p-4 card-body">
{!! $helper !!}
</div>
</div>
</div>

View File

@ -38,14 +38,6 @@
<x-version class="fixed left-2 bottom-1" />
@auth
<script>
window.addEventListener("keydown", function(event) {
if (event.target.nodeName === 'BODY') {
if (event.key === '/') {
event.preventDefault();
window.dispatchEvent(new CustomEvent('slash'));
}
}
})
Livewire.on('reloadWindow', () => {
window.location.reload();
})

View File

@ -71,8 +71,9 @@ class="{{ request()->is('settings') ? 'text-warning icon' : 'icon' }}" viewBox="
</ul>
</nav>
<div class="fixed top-0 right-0 p-2">
<div class="dropdown dropdown-left dropdown-hover">
<label tabindex="0" class="btn btn-ghost no-animation hover:bg-transparent hover:text-warning">
<div class="group">
<label tabindex="0"
class="absolute top-0 right-0 p-2 m-2 cursor-pointer hover:bg-transparent hover:text-warning">
<div class="flex items-center justify-center gap-2 placeholder">
<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">
@ -83,11 +84,13 @@ class="{{ request()->is('settings') ? 'text-warning icon' : 'icon' }}" viewBox="
</svg>
</div>
</label>
<div class="hidden p-4 px-8 group-hover:block">
<ul tabindex="0" class="p-2 mt-3 rounded shadow menu menu-compact dropdown-content bg-coolgray-200 w-52">
<li>
<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">
<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="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" />
@ -97,8 +100,9 @@ class="{{ request()->is('settings') ? 'text-warning icon' : 'icon' }}" viewBox="
</li>
<li>
<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">
<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 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" />
@ -113,8 +117,9 @@ class="{{ request()->is('settings') ? 'text-warning icon' : 'icon' }}" viewBox="
<li>
@csrf
<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">
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" />
@ -126,4 +131,5 @@ class="{{ request()->is('settings') ? 'text-warning icon' : 'icon' }}" viewBox="
</ul>
</div>
</div>
</div>
@endauth

View File

@ -1,10 +1,13 @@
<div class="pb-6">
<h1>Server</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>{{ data_get($server, 'name') }}</li>
</ul>
</div>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
{{ data_get($server, 'name') }}
</li>
</ol>
</nav>
<nav class="flex items-center h-12 gap-4 py-2 border-b-2 border-solid border-coolgray-200">
<a class="{{ request()->routeIs('server.show') ? 'text-white' : '' }}"
href="{{ route('server.show', [

View File

@ -1,11 +1,34 @@
<div class="pb-6">
<h1>Team</h1>
<div class="text-sm breadcrumbs pb-11">
<ul>
<li>Currently Active Team</li>
<li class="font-bold">{{ session('currentTeam.name') }}</li>
</ul>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Currently Active Team
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
{{ session('currentTeam.name') }}
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<span>{{ data_get($application, 'name') }}</span>
</div>
</li>
</ol>
</nav>
<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>

View File

@ -1,12 +1,13 @@
<x-layout>
<h1>Dashboard</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Something (more) useful will be here.
</li>
</ul>
</div>
</ol>
</nav>
<div class="w-full rounded shadow stats stats-vertical lg:stats-horizontal">
<div class="stat">
<div class="stat-title">Servers</div>

View File

@ -1,12 +1,12 @@
<div>
<h1>Create a new Destination</h1>
<div class="pb-5 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Destinations are used to separate resources in a server.
</li>
</ul>
</div>
</ol>
</nav>
<form class="flex flex-col gap-4" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input id="name" label="Name" required />

View File

@ -1,15 +1,15 @@
<div class="flex items-center gap-2">
<div class="dropdown dropdown-bottom dropdown-hover">
<div class="group">
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Actions
<x-chevron-down />
</label>
<div class="absolute hidden group-hover:block ">
@if ($application->status === 'running')
<ul tabindex="0"
class="text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<ul tabindex="0" class="text-xs text-white normal-case rounded min-w-max menu bg-coolgray-200">
<li>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'><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">
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'><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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
@ -19,8 +19,9 @@ class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fil
</li>
<li>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true, true)'><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">
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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 9v-1a3 3 0 0 1 6 0v1" />
<path d="M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3" />
@ -37,8 +38,9 @@ class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fil
</li>
<li>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true)'><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">
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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<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" />
@ -51,9 +53,10 @@ class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fil
</div>
</li>
<li>
<div class="rounded-none hover:bg-red-500" wire:click='stop'><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">
<div class="rounded-none hover:bg-red-500" wire:click='stop'><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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M8 13v-7.5a1.5 1.5 0 0 1 3 0v6.5" />
<path d="M11 5.5v-2a1.5 1.5 0 1 1 3 0v8.5" />
@ -64,20 +67,21 @@ class="w-6 h-6" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fil
</li>
</ul>
@else
<ul tabindex="0"
class="text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<ul tabindex="0" class="text-xs text-white normal-case rounded min-w-max menu bg-coolgray-200">
<li>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'><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">
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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M7 4v16l13 -8z" />
</svg>Deploy</div>
</li>
<li>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true, true)'><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">
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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 9v-1a3 3 0 0 1 6 0v1" />
<path d="M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3" />
@ -112,3 +116,4 @@ class="text-xs text-white normal-case rounded min-w-max dropdown-content menu bg
@endif
</div>
</div>
</div>

View File

@ -1,12 +1,12 @@
<div>
<h1>Create a new Server</h1>
<div class="pb-5 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Servers are the main blocks of your infrastructure.
</li>
</ul>
</div>
</ol>
</nav>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input id="name" label="Name" required />

View File

@ -1,16 +1,17 @@
<div>
@if ($server->settings->is_validated)
@if ($server->extra_attributes->proxy_status === 'running')
<div class="dropdown dropdown-bottom">
<div class="group">
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Actions
<x-chevron-down />
</label>
<ul tabindex="0"
class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<div class="absolute hidden group-hover:block ">
<ul tabindex="0" class="mt-1 text-xs text-white normal-case rounded min-w-max menu bg-coolgray-200">
<li>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'><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">
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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
@ -33,6 +34,7 @@ class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content me
</li>
</ul>
</div>
</div>
@else
<x-forms.button wire:click='deploy'> <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="44"
height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none"

View File

@ -1,13 +1,13 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<h1>Settings</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Instance wide settings for Coolify.
</li>
</ul>
</div>
</ol>
</nav>
<div class="flex items-center gap-2">
<h3>General</h3>
<x-forms.button type="submit">

View File

@ -1,11 +1,11 @@
<x-layout>
<h1>Create a new Private Key</h1>
<div class="pb-5 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Private Keys are used for connection to servers.
</li>
</ul>
</div>
</ol>
</nav>
<livewire:private-key.create />
</x-layout>

View File

@ -1,12 +1,13 @@
<x-layout>
<h1>Profile</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Your user profile settings.
</li>
</ul>
</div>
</ol>
</nav>
<livewire:profile.form :request="$request" />
<h3 class="py-4">Two-factor Authentication</h3>
@if (session('status') == 'two-factor-authentication-enabled')

View File

@ -1,19 +1,37 @@
<x-layout>
<h1>Configuration</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li><a href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
<a href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
{{ $application->environment->project->name }}</a>
</li>
<li><a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</li>
<li>{{ data_get($application, 'name') }}</li>
<li>
<livewire:project.application.status :application="$application" />
</li>
</ul>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<span>{{ data_get($application, 'name') }}</span>
</div>
</li>
</ol>
</nav>
<x-applications.navbar :application="$application" />
<div x-data="{ activeTab: window.location.hash ? window.location.hash.substring(1) : 'general' }" class="flex h-full pt-6">
<div class="flex flex-col gap-4 min-w-fit">

View File

@ -1,19 +1,49 @@
<x-layout>
<h1 class="py-0">Deployment</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li><a
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
<a
href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">{{ $application->environment->project->name }}</a>
</li>
<li><a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</li>
<li>{{ data_get($application, 'name') }}</li>
<li>
<livewire:project.application.status :application="$application" />
</li>
</ul>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<span>{{ data_get($application, 'name') }}</span>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<span>
<livewire:project.application.status :application="$application" />
</span>
</div>
</li>
</ol>
</nav>
<x-applications.navbar :application="$application" />
<livewire:project.application.deployment-logs :activity="$activity" :application="$application" :deployment_uuid="$deployment_uuid" />
</x-layout>

View File

@ -1,19 +1,47 @@
<x-layout>
<h1>Deployments</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li><a
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
<a
href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">{{ $application->environment->project->name }}</a>
</li>
<li><a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</li>
<li>{{ data_get($application, 'name') }}</li>
<li>
<livewire:project.application.status :application="$application" />
</li>
</ul>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<span>{{ data_get($application, 'name') }}</span>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
<livewire:project.application.status :application="$application" />
</div>
</li>
</ol>
</nav>
<x-applications.navbar :application="$application" />
<livewire:project.application.deployments :application_id="$application->id" />
</x-layout>

View File

@ -4,18 +4,26 @@
<h1>Resources</h1>
<livewire:project.delete-environment :environment_id="$environment->id" :resource_count="$environment->applications->count()" />
</div>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
<a href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
{{ $project->name }}
</a>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<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"
clip-rule="evenodd"></path>
</svg>
{{ request()->route('environment_name') }}
</li>
</ul>
</div>
</li>
</ol>
</nav>
</div>
@if ($environment->applications->count() === 0)
<p>No resources found.</p>

View File

@ -3,11 +3,13 @@
<h1>Environments</h1>
<livewire:project.delete-project :project_id="$project->id" :resource_count="$project->applications->count()" />
</div>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>{{ $project->name }} </li>
</ul>
</div>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
{{ $project->name }}
</li>
</ol>
</nav>
<div class="grid grid-cols-2 gap-2">
@forelse ($project->environments as $environment)
<a class="box" href="{{ route('project.resources', [$project->uuid, $environment->name]) }}">

View File

@ -1,12 +1,13 @@
<x-layout>
<h1>Projects</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
All Projects
</li>
</ul>
</div>
</ol>
</nav>
<div class="grid grid-cols-2 gap-2">
@forelse ($projects as $project)
<a href="{{ route('project.show', ['project_uuid' => data_get($project, 'uuid')]) }}"

View File

@ -1,12 +1,12 @@
<x-layout>
<h1>Servers</h1>
<div class="pb-10 text-sm breadcrumbs">
<ul>
<li>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
All Servers
</li>
</ul>
</div>
</ol>
</nav>
<div class="grid grid-cols-2 gap-2">
@forelse ($servers as $server)
<a class="text-center hover:no-underline box group"

View File

@ -1,6 +1,6 @@
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';
import { defineConfig } from "vite";
import laravel from "laravel-vite-plugin";
import vue from "@vitejs/plugin-vue";
export default defineConfig({
server: {
@ -23,10 +23,7 @@ export default defineConfig({
},
plugins: [
laravel({
input: [
'resources/css/app.css',
'resources/js/app.js',
],
input: ["resources/css/app.css", "resources/js/app.js"],
refresh: true,
}),
vue({
@ -40,7 +37,7 @@ export default defineConfig({
],
resolve: {
alias: {
vue: 'vue/dist/vue.esm-bundler.js',
vue: "vue/dist/vue.esm-bundler.js",
},
},
});