This commit is contained in:
Andras Bacsai 2023-05-25 14:05:44 +02:00
parent ea2a13dff2
commit d2b0823cd0
40 changed files with 284 additions and 279 deletions

View File

@ -1,5 +1,7 @@
{
"auth.login": "Login",
"auth.already-registered": "Already registered?",
"auth.register-now": "Register now!",
"auth.logout": "Logout",
"auth.register": "Register",
"auth.registration_disabled": "Registration is disabled.",
@ -11,5 +13,6 @@
"input.name": "Name",
"input.email": "Email",
"input.password": "Password",
"input.password.again": "Password Again"
}
"input.password.again": "Password Again",
"button.save": "Save"
}

View File

@ -2,30 +2,32 @@
<div class="flex items-center justify-center h-screen">
<div>
<div class="pb-8 text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
<div class="flex items-center gap-2">
<h1 class="pb-0">{{ __('auth.login') }}</h1>
@if ($is_registration_enabled)
<a href="/register" class="flex justify-center pt-2">
<x.inputs-button>{{ __('auth.register-now') }}</x.inputs-button>
</a>
@else
<div class="text-sm text-center">{{ __('auth.registration_disabled') }}</div>
@endif
</div>
<div class="w-96">
<form action="/login" method="POST" class="flex flex-col gap-2">
@csrf
<input type="email" name="email" placeholder="{{ __('input.email') }}"
@env('local') value="test@example.com" @endenv autofocus />
<input type="password" name="password" placeholder="{{ __('input.password') }}"
@env('local') value="password" @endenv />
<x-forms.input required type="email" name="email" label="{{ __('input.email') }}" autofocus />
<x-forms.input required type="password" name="password" label="{{ __('input.password') }}" />
@if ($errors->any())
<div class="text-center text-error">
<span>{{ __('auth.failed') }}</span>
</div>
@endif
<x-inputs.button type="submit">{{ __('auth.login') }}</x-inputs.button>
<x-forms.button type="submit">{{ __('auth.login') }}</x-forms.button>
</form>
</div>
@if ($is_registration_enabled)
<a href="/register" class="flex justify-center pt-2">
<button>{{ __('auth.register') }}</button>
</a>
@else
<div class="text-sm text-center">{{ __('auth.registration_disabled') }}</div>
@endif
</div>
</div>

View File

@ -1,28 +1,31 @@
<x-layout-simple>
<div class="flex items-center justify-center h-screen">
<div>
<div class="pb-8 text-5xl font-bold tracking-tight text-center text-white">Coolify</div>
<div class="flex items-center gap-2">
<h1 class="pb-0">{{ __('auth.register') }}</h1>
<a href="/login" class="flex justify-center pt-2">
<x.inputs-button>{{ __('auth.already-registered') }}</x.inputs-button>
</a>
</div>
<form action="/register" method="POST" class="flex flex-col gap-2">
@csrf
<input type="text" name="name" placeholder="{{ __('input.name') }}"
@env('local') value="root" @endenv />
<input type="email" name="email" placeholder="{{ __('input.email') }}"
@env('local') value="test@example.com" @endenv />
<input type="password" name="password" placeholder="{{ __('input.password') }}"
@env('local') value="password" @endenv />
<input type="password" name="password_confirmation" placeholder="{{ __('input.password.again') }}"
@env('local') value="password" @endenv />
<x-inputs.button type="submit">{{ __('auth.register') }}</x-inputs.button>
<x-forms.input required type="text" name="name" label="{{ __('input.name') }}" />
<x-forms.input required type="email" name="email" label="{{ __('input.email') }}" />
<div class="flex gap-2">
<x-forms.input required type="password" name="password" label="{{ __('input.password') }}" />
<x-forms.input required type="password" name="password_confirmation"
label="{{ __('input.password.again') }}" />
</div>
<x-forms.button type="submit">{{ __('auth.register') }}</x-forms.button>
</form>
@if ($errors->any())
<div class="fixed top-0 alert alert-error">
<div class="fixed top-0 text-xs alert alert-error">
<ul>
<li>{{ __('auth.failed') }}</li>
</ul>
</div>
@endif
<a href="/login" class="flex justify-center pt-2">
<button>{{ __('auth.login') }}</button>
</a>
</div>
</div>
</x-layout-simple>

View File

@ -22,8 +22,8 @@
<div class="flex flex-col items-center justify-center h-full">
<div class="pb-5 text-white" x-text="message"></div>
<div>
<x-inputs.button x-on:click='confirmed()'>Confirm</x-inputs.button>
<x-inputs.button x-on:click="open = false">Cancel</x-inputs.button>
<x-forms.button x-on:click='confirmed()'>Confirm</x-forms.button>
<x-forms.button x-on:click="open = false">Cancel</x-forms.button>
</div>
</div>
</div>

View File

@ -1,23 +1,17 @@
@props([
'id' => $attributes->has('id') || $attributes->has('label'),
'id' => $attributes->has('id'),
'type' => $attributes->get('type') ?? 'text',
'required' => null,
'label' => $attributes->has('label'),
'helper' => $attributes->has('helper'),
'noLabel' => $attributes->has('noLabel'),
'noDirty' => $attributes->has('noDirty'),
'required' => null,
'disabled' => null,
'helper' => $attributes->has('helper'),
'noDirty' => $attributes->has('noDirty'),
])
<div {{ $attributes->merge(['class' => 'w-full form-control']) }}>
@if (!$noLabel)
@if ($label)
<label class="label">
<span class="label-text">
@if ($label)
{{ $label }}
@else
{{ $id }}
@endif
{{ $label }}
@if ($required)
<span class="text-warning">*</span>
@endif
@ -41,9 +35,11 @@ class="border rounded shadow border-coolgray-400 card compact dropdown-content b
</span>
</label>
@endif
<input {{ $attributes }} type={{ $type }} name={{ $id }} wire:model.defer={{ $id }}
@if ($disabled !== null) disabled @endif @if ($required !== null) required @endif
@if (!$noDirty) wire:dirty.class="input-warning" @endif />
<input type={{ $type }}
@if ($id) name={{ $id }} wire:model.defer={{ $id }} @endisset
@if ($disabled !== null) disabled @endif
@if ($required !== null) required @endif
@if (!$noDirty && $id) wire:dirty.class="input-warning" @endif {{ $attributes }} />
@error($id)
<label class="label">
<span class="text-red-500 label-text-alt">{{ $message }}</span>

View File

@ -7,10 +7,10 @@
<div class="relative modal-box">
<div class="pb-8 text-base font-bold text-white">{{ $message }}</div>
<div class="flex justify-end gap-4 text-xs">
<x-inputs.button wire:click='{{ $action }}' x-on:click="{{ $show }} = false">
<x-forms.button wire:click='{{ $action }}' x-on:click="{{ $show }} = false">
Yes
</x-inputs.button>
<x-inputs.button x-on:click="{{ $show }} = false">No</x-inputs.button>
</x-forms.button>
<x-forms.button x-on:click="{{ $show }} = false">No</x-forms.button>
</div>
</div>
</div>

View File

@ -11,19 +11,6 @@
</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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 4l-8 4l8 4l8 -4l-8 -4" />
<path d="M4 12l8 4l8 -4" />
<path d="M4 16l8 4l8 -4" />
</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"
@ -37,6 +24,20 @@
</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">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 4l-8 4l8 4l8 -4l-8 -4" />
<path d="M4 12l8 4l8 -4" />
<path d="M4 16l8 4l8 -4" />
</svg>
</a>
</li>
@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>

View File

@ -1,6 +1,6 @@
<div>
<x-inputs.button wire:click='checkUpdate' type="submit">
Check Update</x-inputs.button>
<x-forms.button wire:click='checkUpdate' type="submit">
Check Update</x-forms.button>
@if ($updateAvailable)
Update available
@endif

View File

@ -1,18 +1,18 @@
<div x-data="{ deleteDestination: false }">
<x-naked-modal show="deleteDestination" message='Are you sure you would like to delete this destination?' />
<form class="flex flex-col gap-4" wire:submit.prevent='submit'>
<x-inputs.input id="destination.name" label="Name" />
<x-inputs.input id="destination.server.ip" label="Server IP" readonly />
<x-forms.input id="destination.name" label="Name" />
<x-forms.input id="destination.server.ip" label="Server IP" readonly />
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
<x-inputs.input id="destination.network" label="Docker Network" readonly />
<x-forms.input id="destination.network" label="Docker Network" readonly />
@endif
<div>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Save
</x-inputs.button>
<x-inputs.button x-on:click.prevent="deleteDestination = true">
</x-forms.button>
<x-forms.button x-on:click.prevent="deleteDestination = true">
Delete
</x-inputs.button>
</x-forms.button>
</div>
</form>
</div>

View File

@ -2,18 +2,18 @@
<form class="flex flex-col gap-4" wire:submit.prevent='submit'>
<div class="flex gap-2">
<h1>New Destination</h1>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Save
</x-inputs.button>
</x-forms.button>
</div>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input id="network" label="Network" required />
<x-inputs.select id="server_id" label="Select a server" required>
<x-forms.input id="name" label="Name" required />
<x-forms.input id="network" label="Network" required />
<x-forms.select id="server_id" label="Select a server" required>
@foreach ($servers as $server)
<option disabled>Select a server</option>
<option value="{{ $server->id }}">{{ $server->name }}</option>
@endforeach
</x-inputs.select>
</x-forms.select>
</form>
</div>

View File

@ -1,16 +1,16 @@
<div x-data="{ deletePrivateKey: false }">
<x-naked-modal show="deletePrivateKey" message='Are you sure you would like to delete this private key?' />
<form class="flex flex-col gap-2" wire:submit.prevent='changePrivateKey'>
<x-inputs.input id="private_key.name" label="Name" required />
<x-inputs.input id="private_key.description" label="Description" />
<x-inputs.textarea rows="10" id="private_key.private_key" label="Private Key" required />
<x-forms.input id="private_key.name" label="Name" required />
<x-forms.input id="private_key.description" label="Description" />
<x-forms.textarea rows="10" id="private_key.private_key" label="Private Key" required />
<div>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Save
</x-inputs.button>
<x-inputs.button x-on:click.prevent="deletePrivateKey = true">
</x-forms.button>
<x-forms.button x-on:click.prevent="deletePrivateKey = true">
Delete
</x-inputs.button>
</x-forms.button>
</div>
</form>
</div>

View File

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

View File

@ -2,9 +2,9 @@
<form wire:submit.prevent='submit'>
<div class="flex items-center gap-2">
<h3>Profile</h3>
<x-inputs.button type="submit" label="Save">Save</x-inputs.button>
<x-forms.button type="submit" label="Save">Save</x-forms.button>
</div>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input id="email" label="Email" readonly />
<x-forms.input id="name" label="Name" required />
<x-forms.input id="email" label="Email" readonly />
</form>
</div>

View File

@ -1,5 +1,5 @@
<div x-data="{ deleteApplication: false }">
<h2>Danger Zone</h2>
<x-naked-modal show="deleteApplication" />
<x-inputs.button x-on:click.prevent="deleteApplication = true">Delete this application</x-inputs.button>
<x-forms.button x-on:click.prevent="deleteApplication = true">Delete this application</x-forms.button>
</div>

View File

@ -1,12 +1,12 @@
<form wire:submit.prevent='submit' class="flex flex-col max-w-fit">
<div class="flex gap-2">
<x-inputs.input placeholder="NODE_ENV" noDirty id="key" label="Name" required />
<x-inputs.input placeholder="production" noDirty id="value" label="Value" required />
<x-inputs.checkbox noDirty class="flex-col items-center" id="is_build_time" label="Build Variable?" />
<x-forms.input placeholder="NODE_ENV" noDirty id="key" label="Name" required />
<x-forms.input placeholder="production" noDirty id="value" label="Value" required />
<x-forms.checkbox noDirty class="flex-col items-center" id="is_build_time" label="Build Variable?" />
</div>
<div class="pt-2">
<x-inputs.button type="submit">
<x-forms.button type="submit">
Add
</x-inputs.button>
</x-forms.button>
</div>
</form>

View File

@ -1,17 +1,17 @@
<div x-data="{ deleteEnvironment: false }">
<form wire:submit.prevent='submit' class="flex flex-col max-w-fit">
<div class="flex gap-2">
<x-inputs.input label="Name" id="env.key" />
<x-inputs.input label="Value" id="env.value" />
<x-inputs.checkbox disabled class="flex-col items-center" id="env.is_build_time" label="Build Variable?" />
<x-forms.input label="Name" id="env.key" />
<x-forms.input label="Value" id="env.value" />
<x-forms.checkbox disabled class="flex-col items-center" id="env.is_build_time" label="Build Variable?" />
</div>
<div class="pt-2">
<x-inputs.button type="submit">
<x-forms.button type="submit">
Update
</x-inputs.button>
<x-inputs.button x-on:click.prevent="deleteEnvironment = true">
</x-forms.button>
<x-forms.button x-on:click.prevent="deleteEnvironment = true">
Delete
</x-inputs.button>
</x-forms.button>
</div>
</form>
<x-naked-modal show="deleteEnvironment" message="Are you sure you want to delete {{ $env->key }}?" />

View File

@ -2,15 +2,15 @@
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h2>General</h2>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Save
</x-inputs.button>
</x-forms.button>
</div>
<x-inputs.checkbox instantSave id="is_static" label="Static website?" />
<x-forms.checkbox instantSave id="is_static" label="Static website?" />
<div class="flex flex-col gap-2 pb-4">
<div class="flex flex-col items-end gap-2 xl:flex-row">
<x-inputs.input class="w-full" id="application.name" label="Name" required />
<x-inputs.input placeholder="https://coolify.io" class="w-full" id="application.fqdn" label="Domains"
<x-forms.input class="w-full" id="application.name" label="Name" required />
<x-forms.input placeholder="https://coolify.io" class="w-full" id="application.fqdn" label="Domains"
helper="You can specify one domain with path or more with comma.<br><span class='inline-block font-bold text-warning'>Example</span>- http://app.coolify.io, https://cloud.coolify.io/dashboard<br>- http://app.coolify.io/api/v3" />
</div>
@ -18,67 +18,67 @@
<div class="pb-6">
<div class="text-sm">Set Random Domain</div>
@if ($global_wildcard_domain)
<x-inputs.button isHighlighted wire:click="generateGlobalRandomDomain">Global Wildcard
</x-inputs.button>
<x-forms.button isHighlighted wire:click="generateGlobalRandomDomain">Global Wildcard
</x-forms.button>
@endif
@if ($project_wildcard_domain)
<x-inputs.button isHighlighted wire:click="generateProjectRandomDomain">Project Wildcard
</x-inputs.button>
<x-forms.button isHighlighted wire:click="generateProjectRandomDomain">Project Wildcard
</x-forms.button>
@endif
</div>
@endif
<x-inputs.select id="application.build_pack" label="Build Pack" required>
<x-forms.select id="application.build_pack" label="Build Pack" required>
<option value="nixpacks">Nixpacks</option>
<option disabled value="docker">Docker</option>
<option disabled value="compose">Compose</option>
</x-inputs.select>
</x-forms.select>
@if ($application->settings->is_static)
<x-inputs.select id="application.static_image" label="Static Image" required>
<x-forms.select id="application.static_image" label="Static Image" required>
<option value="nginx:alpine">nginx:alpine</option>
<option disabled value="apache:alpine">apache:alpine</option>
</x-inputs.select>
</x-forms.select>
@endif
<div class="flex flex-col gap-2 pb-6 xl:flex-row">
<x-inputs.input placeholder="pnpm install" id="application.install_command" label="Install Command" />
<x-inputs.input placeholder="pnpm build" id="application.build_command" label="Build Command" />
<x-inputs.input placeholder="pnpm start" id="application.start_command" label="Start 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 start" id="application.start_command" label="Start Command" />
</div>
<div class="flex flex-col gap-2 xl:flex-row">
<x-inputs.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." />
@if ($application->settings->is_static)
<x-inputs.input placeholder="/dist" id="application.publish_directory" label="Publish Directory"
<x-forms.input placeholder="/dist" id="application.publish_directory" label="Publish Directory"
required />
@else
<x-inputs.input placeholder="/" id="application.publish_directory" label="Publish Directory" />
<x-forms.input placeholder="/" id="application.publish_directory" label="Publish Directory" />
@endif
</div>
<div class="flex flex-col gap-2 xl:flex-row">
@if ($application->settings->is_static)
<x-inputs.input id="application.ports_exposes" label="Ports Exposes" readonly />
<x-forms.input id="application.ports_exposes" label="Ports Exposes" readonly />
@else
<x-inputs.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." />
<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." />
@endif
<x-inputs.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" />
</div>
</div>
<h3>Advanced</h3>
<div class="flex flex-col">
<x-inputs.checkbox helper="More logs will be visible during a deployment." instantSave id="is_debug"
<x-forms.checkbox helper="More logs will be visible during a deployment." instantSave id="is_debug"
label="Debug" />
<x-inputs.checkbox
<x-forms.checkbox
helper="Your application will be available only on https if your domain starts with https://..."
instantSave id="is_force_https" label="Force Https" />
<x-inputs.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" label="Auto Deploy?" />
{{-- <x-inputs.checkbox helper="Preview deployments" instantSave id="is_previews" label="Previews?" /> --}}
<x-inputs.checkbox instantSave id="is_git_submodules_allowed" label="Git Submodules Allowed?" />
<x-inputs.checkbox instantSave id="is_git_lfs_allowed" label="Git LFS Allowed?" />
{{-- <x-inputs.checkbox disabled instantSave id="is_dual_cert" label="Dual Certs?" />
<x-inputs.checkbox disabled instantSave id="is_custom_ssl" label="Is Custom SSL?" />
<x-inputs.checkbox disabled instantSave id="is_http2" label="Is Http2?" /> --}}
{{-- <x-forms.checkbox helper="Preview deployments" instantSave id="is_previews" label="Previews?" /> --}}
<x-forms.checkbox instantSave id="is_git_submodules_allowed" label="Git Submodules Allowed?" />
<x-forms.checkbox instantSave id="is_git_lfs_allowed" label="Git LFS Allowed?" />
{{-- <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_http2" label="Is Http2?" /> --}}
</div>
</form>
</div>

View File

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

View File

@ -1,7 +1,7 @@
<div x-init="$wire.loadImages">
<div class="flex gap-2">
<h2>Rollback</h2>
<x-inputs.button isHighlighted wire:click='loadImages'>Refresh</x-inputs.button>
<x-forms.button isHighlighted wire:click='loadImages'>Refresh</x-forms.button>
</div>
<div wire:loading wire:target='loadImages'>
<x-loading />
@ -23,13 +23,13 @@
</div>
<div class="flex justify-end p-2">
@if (data_get($image, 'is_current'))
<x-inputs.button disabled tooltip="This image is currently running.">
<x-forms.button disabled tooltip="This image is currently running.">
Rollback
</x-inputs.button>
</x-forms.button>
@else
<x-inputs.button wire:click="rollbackImage('{{ data_get($image, 'tag') }}')">
<x-forms.button wire:click="rollbackImage('{{ data_get($image, 'tag') }}')">
Rollback
</x-inputs.button>
</x-forms.button>
@endif
</div>
</div>

View File

@ -2,7 +2,7 @@
<form wire:submit.prevent='submit' class="flex flex-col gap-2">
<div class="flex gap-4">
<h2>Source</h2>
<x-inputs.button type="submit">Save</x-inputs.button>
<x-forms.button type="submit">Save</x-forms.button>
<a target="_blank" href="{{ $application->gitCommits }}">
Commits
<x-external-link />
@ -13,9 +13,9 @@
<span class="text-xs">public</span>
@endif
</div> --}}
<x-inputs.input placeholder="coollabsio/coolify-example" id="application.git_repository" label="Repository" />
<x-inputs.input placeholder="main" id="application.git_branch" label=" Branch" />
<x-inputs.input placeholder="HEAD" id="application.git_commit_sha" placeholder="HEAD" label="Commit SHA" />
<x-forms.input placeholder="coollabsio/coolify-example" id="application.git_repository" label="Repository" />
<x-forms.input placeholder="main" id="application.git_branch" label=" Branch" />
<x-forms.input placeholder="HEAD" id="application.git_commit_sha" placeholder="HEAD" label="Commit SHA" />
</form>

View File

@ -1,12 +1,12 @@
<form wire:submit.prevent='submit' class="flex flex-col px-2 pt-10 max-w-fit">
<div class="flex gap-2">
<x-inputs.input placeholder="pv-name" noDirty id="name" label="Name" required />
<x-inputs.input placeholder="/root" noDirty id="host_path" label="Source Path" />
<x-inputs.input placeholder="/tmp/root" noDirty id="mount_path" label="Destination Path" required />
<x-forms.input placeholder="pv-name" noDirty id="name" label="Name" required />
<x-forms.input placeholder="/root" noDirty id="host_path" label="Source Path" />
<x-forms.input placeholder="/tmp/root" noDirty id="mount_path" label="Destination Path" required />
</div>
<div class="pt-2">
<x-inputs.button type="submit">
<x-forms.button type="submit">
Add
</x-inputs.button>
</x-forms.button>
</div>
</form>

View File

@ -1,17 +1,17 @@
<div x-data="{ deleteStorage: false }">
<form wire:submit.prevent='submit' class="flex flex-col px-2 max-w-fit">
<div class="flex gap-2">
<x-inputs.input id="storage.name" label="Name" required />
<x-inputs.input id="storage.host_path" label="Source Path" />
<x-inputs.input id="storage.mount_path" label="Destination Path" 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.mount_path" label="Destination Path" required />
</div>
<div class="pt-2">
<x-inputs.button type="submit">
<x-forms.button type="submit">
Update
</x-inputs.button>
<x-inputs.button x-on:click.prevent="deleteStorage = true">
</x-forms.button>
<x-forms.button x-on:click.prevent="deleteStorage = true">
Delete
</x-inputs.button>
</x-forms.button>
</div>
</form>
<x-naked-modal show="deleteStorage" message="Are you sure you want to delete {{ $storage->name }}?" />

View File

@ -1,12 +1,12 @@
<div x-data="{ deleteEnvironment: false }">
<x-naked-modal show="deleteEnvironment" message='Are you sure you would like to delete this environment?' />
@if ($resource_count > 0)
<x-inputs.button tooltip="First delete all resources." disabled>
<x-forms.button tooltip="First delete all resources." disabled>
Delete
</x-inputs.button>
</x-forms.button>
@else
<x-inputs.button x-on:click.prevent="deleteEnvironment = true">
<x-forms.button x-on:click.prevent="deleteEnvironment = true">
Delete
</x-inputs.button>
</x-forms.button>
@endif
</div>

View File

@ -1,12 +1,12 @@
<div x-data="{ deleteProject: false }">
<x-naked-modal show="deleteProject" message='Are you sure you would like to delete this project?' />
@if ($resource_count > 0)
<x-inputs.button disabled="First delete all resources.">
<x-forms.button disabled="First delete all resources.">
Delete
</x-inputs.button>
</x-forms.button>
@else
<x-inputs.button x-on:click.prevent="deleteProject = true">
<x-forms.button x-on:click.prevent="deleteProject = true">
Delete
</x-inputs.button>
</x-forms.button>
@endif
</div>

View File

@ -1 +1 @@
<x-inputs.button wire:click='createEmptyProject'>Empty Project</x-inputs.button>
<x-forms.button wire:click='createEmptyProject'>Empty Project</x-forms.button>

View File

@ -3,11 +3,11 @@
<h1>Select a private key</h1>
@foreach ($private_keys as $key)
@if ($private_key_id == $key->id)
<x-inputs.button class="bg-blue-500" wire:click.defer="setPrivateKey('{{ $key->id }}')">
{{ $key->name }}</x-inputs.button>
<x-forms.button class="bg-blue-500" wire:click.defer="setPrivateKey('{{ $key->id }}')">
{{ $key->name }}</x-forms.button>
@else
<x-inputs.button wire:click.defer="setPrivateKey('{{ $key->id }}')">{{ $key->name }}
</x-inputs.button>
<x-forms.button wire:click.defer="setPrivateKey('{{ $key->id }}')">{{ $key->name }}
</x-forms.button>
@endif
@endforeach
</div>
@ -15,17 +15,17 @@
<h1>Choose a repository</h1>
<form wire:submit.prevent='submit'>
<div class="flex items-end gap-2 pb-2">
<x-inputs.input class="w-96" id="repository_url" label="Repository URL" />
<x-forms.input class="w-96" id="repository_url" label="Repository URL" />
@if ($is_static)
<x-inputs.input id="publish_directory" label="Publish Directory" />
<x-forms.input id="publish_directory" label="Publish Directory" />
@else
<x-inputs.input type="number" id="port" label="Port" :readonly="$is_static" />
<x-forms.input type="number" id="port" label="Port" :readonly="$is_static" />
@endif
<x-inputs.input instantSave type="checkbox" id="is_static" label="Static Site?" />
<x-forms.input instantSave type="checkbox" id="is_static" label="Static Site?" />
</div>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Submit
</x-inputs.button>
</x-forms.button>
</form>
@endisset
</div>

View File

@ -2,9 +2,9 @@
@if ($github_apps->count() > 0)
<h1>Choose a GitHub App</h1>
@foreach ($github_apps as $ghapp)
<x-inputs.button wire:key="{{ $ghapp->id }}" wire:click="loadRepositories({{ $ghapp->id }})">
<x-forms.button wire:key="{{ $ghapp->id }}" wire:click="loadRepositories({{ $ghapp->id }})">
{{ $ghapp->name }}
</x-inputs.button>
</x-forms.button>
@endforeach
<div>
@if ($repositories->count() > 0)
@ -18,7 +18,7 @@
@endif
@endforeach
</select>
<x-inputs.button wire:click="loadBranches">Select Repository</x-inputs.button>
<x-forms.button wire:click="loadBranches">Select Repository</x-forms.button>
@endif
</div>
<div>
@ -35,7 +35,7 @@
@endif
@endforeach
</select>
<x-inputs.button wire:click="submit">Save</x-inputs.button>
<x-forms.button wire:click="submit">Save</x-forms.button>
@endif
</div>
@else

View File

@ -1,20 +1,20 @@
<div>
<h1>Enter a public repository URL</h1>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<x-inputs.checkbox instantSave id="is_static" label="Is it a static site?" />
<x-forms.checkbox instantSave id="is_static" label="Is it a static site?" />
<div class="flex gap-2">
<x-inputs.input id="repository_url" label="Repository URL"
<x-forms.input id="repository_url" label="Repository URL"
helper="<span class='inline-block font-bold text-warning'>Example</span>https://github.com/coollabsio/coolify-examples => main branch will be selected<br>https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify => nodejs-fastify branch will be selected" />
@if ($is_static)
<x-inputs.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." />
@else
<x-inputs.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." />
@endif
</div>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Submit
</x-inputs.button>
</x-forms.button>
</form>
</div>

View File

@ -1,8 +1,8 @@
<div>
<h1>Command Center</h1>
<form class="flex items-end justify-center gap-2" wire:submit.prevent='runCommand'>
<x-inputs.input placeholder="ls -l" autofocus noDirty noLabel id="command" label="Command" required />
<x-inputs.select label="Server" id="server" required>
<x-forms.input placeholder="ls -l" autofocus noDirty id="command" label="Command" required />
<x-forms.select label="Server" id="server" required>
@foreach ($servers as $server)
@if ($loop->first)
<option selected value="{{ $server->uuid }}">{{ $server->name }}</option>
@ -10,8 +10,8 @@
<option value="{{ $server->uuid }}">{{ $server->name }}</option>
@endif
@endforeach
</x-inputs.select>
<x-inputs.button class="btn-xl" type="submit">Run</x-inputs.button>
</x-forms.select>
<x-forms.button class="btn-xl" type="submit">Run</x-forms.button>
</form>
<div class="container w-full pt-10 mx-auto">
<livewire:activity-monitor />

View File

@ -3,44 +3,44 @@
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h2>General</h2>
<x-inputs.button type="submit">Save</x-inputs.button>
<x-forms.button type="submit">Save</x-forms.button>
@if ($server_id !== 0)
<x-inputs.button x-on:click.prevent="deleteServer = true">
<x-forms.button x-on:click.prevent="deleteServer = true">
Delete
</x-inputs.button>
</x-forms.button>
@endif
</div>
<div class="flex flex-col gap-2 xl:flex-row">
<div class="flex flex-col w-96">
<x-inputs.input id="server.name" label="Name" required />
<x-inputs.input id="server.description" label="Description" />
{{-- <x-inputs.checkbox disabled type="checkbox" id="server.settings.is_part_of_swarm"
<x-forms.input id="server.name" label="Name" required />
<x-forms.input id="server.description" label="Description" />
{{-- <x-forms.checkbox disabled type="checkbox" id="server.settings.is_part_of_swarm"
label="Is it part of a Swarm cluster?" /> --}}
</div>
<div class="flex flex-col">
@if ($server->id === 0)
<x-inputs.input id="server.ip" label="IP Address" readonly />
<x-inputs.input id="server.user" label="User" readonly />
<x-inputs.input type="number" id="server.port" label="Port" readonly />
<x-forms.input id="server.ip" label="IP Address" readonly />
<x-forms.input id="server.user" label="User" readonly />
<x-forms.input type="number" id="server.port" label="Port" readonly />
@else
<x-inputs.input id="server.ip" label="IP Address" required readonly />
<x-forms.input id="server.ip" label="IP Address" required readonly />
<div class="flex gap-2">
<x-inputs.input id="server.user" label="User" required />
<x-inputs.input type="number" id="server.port" label="Port" required />
<x-forms.input id="server.user" label="User" required />
<x-forms.input type="number" id="server.port" label="Port" required />
</div>
@endif
</div>
</div>
<h3>Quick Actions</h3>
<div class="flex items-center gap-2">
<x-inputs.button wire:click.prevent='validateServer'>
<x-forms.button wire:click.prevent='validateServer'>
@if ($server->settings->is_validated)
Check Connection
@else
Validate Server
@endif
</x-inputs.button>
{{-- <x-inputs.button wire:click.prevent='installDocker'>Install Docker</x-inputs.button> --}}
</x-forms.button>
{{-- <x-forms.button wire:click.prevent='installDocker'>Install Docker</x-forms.button> --}}
</div>
<div class="pt-3 text-sm">
@isset($uptime)
@ -57,7 +57,7 @@
<div class="flex items-center gap-2 py-4">
<h3>Private Key</h3>
<a href="{{ route('server.private-key', ['server_uuid' => $server->uuid]) }}">
<x-inputs.button>Change</x-inputs.button>
<x-forms.button>Change</x-forms.button>
</a>
</div>
<a href="{{ route('private-key.show', ['private_key_uuid' => data_get($server, 'privateKey.uuid')]) }}">
@ -66,7 +66,7 @@
<div class="flex items-center gap-2 py-4">
<h3>Destinations</h3>
<a href="{{ route('destination.new', ['server_id' => $server->id]) }}">
<x-inputs.button>Add</x-inputs.button>
<x-forms.button>Add</x-forms.button>
</a>
</div>
<div>

View File

@ -2,18 +2,18 @@
<form class="flex flex-col gap-1" wire:submit.prevent='submit'>
<div class="flex items-center gap-2">
<h1>New Server</h1>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Save
</x-inputs.button>
</x-forms.button>
</div>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input id="description" label="Description" />
<x-inputs.input id="ip" label="IP Address" required
<x-forms.input id="name" label="Name" required />
<x-forms.input id="description" label="Description" />
<x-forms.input id="ip" label="IP Address" required
helper="Could be IP Address (127.0.0.1) or Domain Name (duckduckgo.com)." />
<x-inputs.input id="user" label="User" required />
<x-inputs.input type="number" id="port" label="Port" required />
<x-forms.input id="user" label="User" required />
<x-forms.input type="number" id="port" label="Port" required />
<label>Private Key</label>
<x-inputs.select wire:model.defer="private_key_id">
<x-forms.select wire:model.defer="private_key_id">
<option disabled>Select a private key</option>
@foreach ($private_keys as $key)
@if ($loop->first)
@ -22,8 +22,8 @@
<option value="{{ $key->id }}">{{ $key->name }}</option>
@endif
@endforeach
</x-inputs.select>
<x-inputs.checkbox instantSave noDirty id="is_part_of_swarm" label="Is it part of a Swarm cluster?" />
</x-forms.select>
<x-forms.checkbox instantSave noDirty id="is_part_of_swarm" label="Is it part of a Swarm cluster?" />
</form>
</div>

View File

@ -5,11 +5,11 @@
<div class="flex items-center gap-2 mb-2">
<h2 class="pb-0">Proxy</h2>
@if ($server->extra_attributes->proxy_type)
<x-inputs.button isHighlighted wire:click.prevent="installProxy">
<x-forms.button isHighlighted wire:click.prevent="installProxy">
Start/Reconfigure Proxy
</x-inputs.button>
<x-inputs.button x-on:click.prevent="stopProxy = true">Stop
</x-inputs.button>
</x-forms.button>
<x-forms.button x-on:click.prevent="stopProxy = true">Stop
</x-forms.button>
<div wire:poll.5000ms="proxyStatus">
@if (
$server->extra_attributes->last_applied_proxy_settings &&
@ -46,13 +46,13 @@
<form wire:submit.prevent='saveConfiguration'>
<div class="flex items-center gap-2">
<h3>Configuration</h3>
<x-inputs.button type="submit">Save</x-inputs.button>
<x-inputs.button wire:click.prevent="resetProxy">
<x-forms.button type="submit">Save</x-forms.button>
<x-forms.button wire:click.prevent="resetProxy">
Reset Configuration
</x-inputs.button>
</x-forms.button>
</div>
<h4>traefik.conf</h4>
<x-inputs.textarea class="text-xs" noDirty name="proxy_settings"
<x-forms.textarea class="text-xs" noDirty name="proxy_settings"
wire:model.defer="proxy_settings" rows="30" />
</form>
@endif
@ -64,7 +64,7 @@
{{ \App\Enums\ProxyTypes::TRAEFIK_V2 }}
</option>
</select>
<x-inputs.button wire:click="setProxy">Set Proxy</x-inputs.button>
<x-forms.button wire:click="setProxy">Set Proxy</x-forms.button>
@endif
@else
<p>Server is not validated. Validate first.</p>

View File

@ -2,28 +2,28 @@
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2 border-b-2 border-solid border-coolgray-200">
<h1>Settings</h1>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Save
</x-inputs.button>
</x-forms.button>
</div>
<div class="flex flex-col gap-2">
<div class="flex flex-col gap-2 xl:flex-row">
<x-inputs.input id="settings.fqdn" label="Coolify's Domain" />
<x-inputs.input id="settings.wildcard_domain" label="Wildcard Domain"
<x-forms.input id="settings.fqdn" label="Coolify's Domain" />
<x-forms.input id="settings.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><br><span class='inline-block font-bold text-warning'>Example</span>https://example.com<br>Your applications will get https://randomthing.example.com" />
</div>
<div class="flex flex-col gap-2 xl:flex-row">
<x-inputs.input type="number" id="settings.public_port_min" label="Public Port Min" />
<x-inputs.input type="number" id="settings.public_port_max" label="Public Port Max" />
<x-forms.input type="number" id="settings.public_port_min" label="Public Port Min" />
<x-forms.input type="number" id="settings.public_port_max" label="Public Port Max" />
</div>
</div>
</form>
<h3>Advanced</h3>
<div class="flex flex-col pt-4 text-right w-52">
<x-inputs.checkbox instantSave id="is_auto_update_enabled" label="Auto Update Coolify" />
<x-inputs.checkbox instantSave id="is_registration_enabled" label="Registration Allowed" />
{{-- <x-inputs.checkbox instantSave id="is_https_forced" label="Force https?" /> --}}
<x-inputs.checkbox instantSave id="do_not_track" label="Do Not Track" />
<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_https_forced" label="Force https?" /> --}}
<x-forms.checkbox instantSave id="do_not_track" label="Do Not Track" />
</div>
</div>

View File

@ -1,16 +1,16 @@
<div>
<form wire:submit.prevent='createGitHubApp'>
<x-inputs.button type="submit">
<x-forms.button type="submit">
Submit
</x-inputs.button>
</x-forms.button>
<h3 class="pt-4">General</h3>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input helper="If empty, your user will be used." id="organization" label="Organization" />
<x-forms.input id="name" label="Name" required />
<x-forms.input helper="If empty, your user will be used." id="organization" label="Organization" />
<h3 class="pt-4">Advanced</h3>
<x-inputs.input id="html_url" label="HTML Url" required />
<x-inputs.input id="api_url" label="API Url" required />
<x-inputs.input id="custom_user" label="Custom Git User" required />
<x-inputs.input id="custom_port" label="Custom Git Port" required />
<x-inputs.checkbox class="pt-2" id="is_system_wide" label="System Wide" />
<x-forms.input id="html_url" label="HTML Url" required />
<x-forms.input id="api_url" label="API Url" 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.checkbox class="pt-2" id="is_system_wide" label="System Wide" />
</form>
</div>

View File

@ -5,12 +5,12 @@
<h1>GitHub App</h1>
<div class="flex gap-2 ">
@if ($github_app->app_id)
<x-inputs.button type="submit">Save</x-inputs.button>
<x-inputs.button x-on:click.prevent="deleteSource = true">
<x-forms.button type="submit">Save</x-forms.button>
<x-forms.button x-on:click.prevent="deleteSource = true">
Delete
</x-inputs.button>
</x-forms.button>
<a href="{{ $installation_url }}">
<x-inputs.button>
<x-forms.button>
@if ($github_app->installation_id)
Update Repositories
<x-external-link />
@ -18,43 +18,43 @@
Install Repositories
<x-external-link />
@endif
</x-inputs.button>
</x-forms.button>
</a>
@else
<x-inputs.button disabled type="submit">Save</x-inputs.button>
<x-inputs.button x-on:click.prevent="deleteSource = true">
<x-forms.button disabled type="submit">Save</x-forms.button>
<x-forms.button x-on:click.prevent="deleteSource = true">
Delete
</x-inputs.button>
</x-forms.button>
<form x-data>
<x-inputs.button isHighlighted x-on:click.prevent="createGithubApp">Create GitHub Application
</x-inputs.button>
<x-forms.button isHighlighted x-on:click.prevent="createGithubApp">Create GitHub Application
</x-forms.button>
</form>
@endif
</div>
</div>
<x-inputs.input id="github_app.name" label="App Name" required />
<x-forms.input id="github_app.name" label="App Name" required />
@if ($github_app->app_id)
<x-inputs.input id="github_app.organization" label="Organization" disabled
<x-forms.input id="github_app.organization" label="Organization" disabled
placeholder="Personal user if empty" />
@else
<x-inputs.input id="github_app.organization" label="Organization" placeholder="Personal user if empty" />
<x-forms.input id="github_app.organization" label="Organization" placeholder="Personal user if empty" />
@endif
<x-inputs.input id="github_app.api_url" label="API Url" disabled />
<x-inputs.input id="github_app.html_url" label="HTML Url" disabled />
<x-inputs.input id="github_app.custom_user" label="User" required />
<x-inputs.input type="number" id="github_app.custom_port" label="Port" required />
<x-forms.input id="github_app.api_url" label="API Url" disabled />
<x-forms.input id="github_app.html_url" label="HTML Url" disabled />
<x-forms.input id="github_app.custom_user" label="User" required />
<x-forms.input type="number" id="github_app.custom_port" label="Port" required />
@if ($github_app->app_id)
<x-inputs.input type="number" id="github_app.app_id" label="App Id" disabled />
<x-inputs.input type="number" id="github_app.installation_id" label="Installation Id" disabled />
<x-inputs.input id="github_app.client_id" label="Client Id" type="password" disabled />
<x-inputs.input id="github_app.client_secret" label="Client Secret" type="password" disabled />
<x-inputs.input id="github_app.webhook_secret" label="Webhook Secret" type="password" disabled />
<x-inputs.checkbox noDirty label="System Wide?" instantSave id="is_system_wide" />
<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 id="github_app.client_id" label="Client Id" type="password" disabled />
<x-forms.input id="github_app.client_secret" label="Client Secret" type="password" disabled />
<x-forms.input id="github_app.webhook_secret" label="Webhook Secret" type="password" disabled />
<x-forms.checkbox noDirty label="System Wide?" instantSave id="is_system_wide" />
@else
<x-inputs.checkbox noDirty label="System Wide?" instantSave id="is_system_wide" />
<x-forms.checkbox noDirty label="System Wide?" instantSave id="is_system_wide" />
<div class="py-2">
</div>

View File

@ -3,9 +3,9 @@
@if (auth()->user()->otherTeams()->count() > 0)
<div class="flex gap-2">
@foreach (auth()->user()->otherTeams() as $team)
<x-inputs.button isHighlighted wire:key="{{ $team->id }}"
<x-forms.button isHighlighted wire:key="{{ $team->id }}"
wire:click="switch_to('{{ $team->id }}')">
{{ $team->name }}</x-inputs.button>
{{ $team->name }}</x-forms.button>
@endforeach
</div>
@endif