Merge pull request #1887 from coollabsio/next

v4.0.0-beta.243
This commit is contained in:
Andras Bacsai
2024-03-25 14:54:35 +01:00
committed by GitHub
20 changed files with 406 additions and 552 deletions

View File

@@ -15,14 +15,11 @@ class Index extends Component
{ {
protected $listeners = ['serverInstalled' => 'validateServer']; protected $listeners = ['serverInstalled' => 'validateServer'];
#[Url()] public string $currentState = 'welcome';
public string $state = 'welcome';
#[Url()]
public ?string $selectedServerType = null; public ?string $selectedServerType = null;
public ?Collection $privateKeys = null; public ?Collection $privateKeys = null;
#[Url()]
public ?int $selectedExistingPrivateKey = null; public ?int $selectedExistingPrivateKey = null;
public ?string $privateKeyType = null; public ?string $privateKeyType = null;
public ?string $privateKey = null; public ?string $privateKey = null;
@@ -33,7 +30,6 @@ class Index extends Component
public ?Collection $servers = null; public ?Collection $servers = null;
#[Url()]
public ?int $selectedExistingServer = null; public ?int $selectedExistingServer = null;
public ?string $remoteServerName = null; public ?string $remoteServerName = null;
public ?string $remoteServerDescription = null; public ?string $remoteServerDescription = null;
@@ -46,7 +42,6 @@ class Index extends Component
public Collection $projects; public Collection $projects;
#[Url()]
public ?int $selectedProject = null; public ?int $selectedProject = null;
public ?Project $createdProject = null; public ?Project $createdProject = null;
@@ -71,25 +66,25 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->remoteServerDescription = 'Created by Coolify'; $this->remoteServerDescription = 'Created by Coolify';
$this->remoteServerHost = 'coolify-testing-host'; $this->remoteServerHost = 'coolify-testing-host';
} }
if ($this->state === 'create-project') { // if ($this->currentState === 'create-project') {
$this->getProjects(); // $this->getProjects();
} // }
if ($this->state === 'create-resource') { // if ($this->currentState === 'create-resource') {
$this->selectExistingServer(); // $this->selectExistingServer();
$this->selectExistingProject(); // $this->selectExistingProject();
} // }
if ($this->state === 'private-key') { // if ($this->currentState === 'private-key') {
$this->setServerType('remote'); // $this->setServerType('remote');
} // }
if ($this->state === 'create-server') { // if ($this->currentState === 'create-server') {
$this->selectExistingPrivateKey(); // $this->selectExistingPrivateKey();
} // }
if ($this->state === 'validate-server') { // if ($this->currentState === 'validate-server') {
$this->selectExistingServer(); // $this->selectExistingServer();
} // }
if ($this->state === 'select-existing-server') { // if ($this->currentState === 'select-existing-server') {
$this->selectExistingServer(); // $this->selectExistingServer();
} // }
} }
public function explanation() public function explanation()
@@ -97,7 +92,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
if (isCloud()) { if (isCloud()) {
return $this->setServerType('remote'); return $this->setServerType('remote');
} }
$this->state = 'select-server-type'; $this->currentState = 'select-server-type';
} }
public function restartBoarding() public function restartBoarding()
@@ -136,10 +131,10 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->servers = Server::ownedByCurrentTeam(['name'])->where('id', '!=', 0)->get(); $this->servers = Server::ownedByCurrentTeam(['name'])->where('id', '!=', 0)->get();
if ($this->servers->count() > 0) { if ($this->servers->count() > 0) {
$this->selectedExistingServer = $this->servers->first()->id; $this->selectedExistingServer = $this->servers->first()->id;
$this->state = 'select-existing-server'; $this->currentState = 'select-existing-server';
return; return;
} }
$this->state = 'private-key'; $this->currentState = 'private-key';
} }
} }
public function selectExistingServer() public function selectExistingServer()
@@ -147,12 +142,12 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdServer = Server::find($this->selectedExistingServer); $this->createdServer = Server::find($this->selectedExistingServer);
if (!$this->createdServer) { if (!$this->createdServer) {
$this->dispatch('error', 'Server is not found.'); $this->dispatch('error', 'Server is not found.');
$this->state = 'private-key'; $this->currentState = 'private-key';
return; return;
} }
$this->selectedExistingPrivateKey = $this->createdServer->privateKey->id; $this->selectedExistingPrivateKey = $this->createdServer->privateKey->id;
$this->serverPublicKey = $this->createdServer->privateKey->publicKey(); $this->serverPublicKey = $this->createdServer->privateKey->publicKey();
$this->state = 'validate-server'; $this->currentState = 'validate-server';
} }
public function getProxyType() public function getProxyType()
{ {
@@ -160,7 +155,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->selectProxy(ProxyTypes::TRAEFIK_V2->value); $this->selectProxy(ProxyTypes::TRAEFIK_V2->value);
// $proxyTypeSet = $this->createdServer->proxy->type; // $proxyTypeSet = $this->createdServer->proxy->type;
// if (!$proxyTypeSet) { // if (!$proxyTypeSet) {
// $this->state = 'select-proxy'; // $this->currentState = 'select-proxy';
// return; // return;
// } // }
$this->getProjects(); $this->getProjects();
@@ -173,12 +168,12 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
} }
$this->createdPrivateKey = PrivateKey::find($this->selectedExistingPrivateKey); $this->createdPrivateKey = PrivateKey::find($this->selectedExistingPrivateKey);
$this->privateKey = $this->createdPrivateKey->private_key; $this->privateKey = $this->createdPrivateKey->private_key;
$this->state = 'create-server'; $this->currentState = 'create-server';
} }
public function createNewServer() public function createNewServer()
{ {
$this->selectedExistingServer = null; $this->selectedExistingServer = null;
$this->state = 'private-key'; $this->currentState = 'private-key';
} }
public function setPrivateKey(string $type) public function setPrivateKey(string $type)
{ {
@@ -187,7 +182,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
if ($type === 'create') { if ($type === 'create') {
$this->createNewPrivateKey(); $this->createNewPrivateKey();
} }
$this->state = 'create-private-key'; $this->currentState = 'create-private-key';
} }
public function savePrivateKey() public function savePrivateKey()
{ {
@@ -202,7 +197,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
'team_id' => currentTeam()->id 'team_id' => currentTeam()->id
]); ]);
$this->createdPrivateKey->save(); $this->createdPrivateKey->save();
$this->state = 'create-server'; $this->currentState = 'create-server';
} }
public function saveServer() public function saveServer()
{ {
@@ -231,7 +226,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdServer->settings->save(); $this->createdServer->settings->save();
$this->createdServer->addInitialNetwork(); $this->createdServer->addInitialNetwork();
$this->selectedExistingServer = $this->createdServer->id; $this->selectedExistingServer = $this->createdServer->id;
$this->state = 'validate-server'; $this->currentState = 'validate-server';
} }
public function installServer() public function installServer()
{ {
@@ -258,7 +253,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $this->createdServer, true); $dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $this->createdServer, true);
$dockerVersion = checkMinimumDockerEngineVersion($dockerVersion); $dockerVersion = checkMinimumDockerEngineVersion($dockerVersion);
if (is_null($dockerVersion)) { if (is_null($dockerVersion)) {
$this->state = 'validate-server'; $this->currentState = 'validate-server';
throw new \Exception('Docker not found or old version is installed.'); throw new \Exception('Docker not found or old version is installed.');
} }
$this->createdServer->settings()->update([ $this->createdServer->settings()->update([
@@ -286,12 +281,12 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
if ($this->projects->count() > 0) { if ($this->projects->count() > 0) {
$this->selectedProject = $this->projects->first()->id; $this->selectedProject = $this->projects->first()->id;
} }
$this->state = 'create-project'; $this->currentState = 'create-project';
} }
public function selectExistingProject() public function selectExistingProject()
{ {
$this->createdProject = Project::find($this->selectedProject); $this->createdProject = Project::find($this->selectedProject);
$this->state = 'create-resource'; $this->currentState = 'create-resource';
} }
public function createNewProject() public function createNewProject()
{ {
@@ -299,7 +294,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
'name' => "My first project", 'name' => "My first project",
'team_id' => currentTeam()->id 'team_id' => currentTeam()->id
]); ]);
$this->state = 'create-resource'; $this->currentState = 'create-resource';
} }
public function showNewResource() public function showNewResource()
{ {

View File

@@ -41,7 +41,6 @@
"stripe/stripe-php": "^12.0", "stripe/stripe-php": "^12.0",
"symfony/yaml": "^6.2", "symfony/yaml": "^6.2",
"visus/cuid2": "^2.0.0", "visus/cuid2": "^2.0.0",
"wire-elements/modal": "^2.0",
"yosymfony/toml": "^1.0" "yosymfony/toml": "^1.0"
}, },
"require-dev": { "require-dev": {

60
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "9bdaf702cdd870434444f8937a816fdb", "content-hash": "e095b8a9eb22df2943cbc3e9649ff9e8",
"packages": [ "packages": [
{ {
"name": "amphp/amp", "name": "amphp/amp",
@@ -11859,64 +11859,6 @@
}, },
"time": "2022-06-03T18:03:27+00:00" "time": "2022-06-03T18:03:27+00:00"
}, },
{
"name": "wire-elements/modal",
"version": "2.0.9",
"source": {
"type": "git",
"url": "https://github.com/wire-elements/modal.git",
"reference": "899b05e313403669aa8a359db71a066246184355"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/wire-elements/modal/zipball/899b05e313403669aa8a359db71a066246184355",
"reference": "899b05e313403669aa8a359db71a066246184355",
"shasum": ""
},
"require": {
"livewire/livewire": "^3.2.3",
"php": "^8.1",
"spatie/laravel-package-tools": "^1.9"
},
"require-dev": {
"orchestra/testbench": "^8.5",
"phpunit/phpunit": "^9.5"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"LivewireUI\\Modal\\LivewireModalServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LivewireUI\\Modal\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Philo Hermans",
"email": "me@philohermans.com"
}
],
"description": "Laravel Livewire modal component",
"keywords": [
"laravel",
"livewire",
"modal"
],
"support": {
"issues": "https://github.com/wire-elements/modal/issues",
"source": "https://github.com/wire-elements/modal/tree/2.0.9"
},
"time": "2023-12-08T09:31:14+00:00"
},
{ {
"name": "yosymfony/parser-utils", "name": "yosymfony/parser-utils",
"version": "v2.0.0", "version": "v2.0.0",

View File

@@ -7,7 +7,7 @@ return [
// The release version of your application // The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
'release' => '4.0.0-beta.242', 'release' => '4.0.0-beta.243',
// When left empty or `null` the Laravel environment will be used // When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'), 'environment' => config('app.env'),

View File

@@ -1,3 +1,3 @@
<?php <?php
return '4.0.0-beta.242'; return '4.0.0-beta.243';

View File

@@ -1,52 +0,0 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Include CSS
|--------------------------------------------------------------------------
|
| The modal uses TailwindCSS, if you don't use TailwindCSS you will need
| to set this parameter to true. This includes the modern-normalize css.
|
*/
'include_css' => false,
/*
|--------------------------------------------------------------------------
| Include JS
|--------------------------------------------------------------------------
|
| Livewire UI will inject the required Javascript in your blade template.
| If you want to bundle the required Javascript you can set this to false
| and add `require('vendor/wire-elements/modal/resources/js/modal');`
| to your script bundler like webpack.
|
*/
'include_js' => false,
/*
|--------------------------------------------------------------------------
| Modal Component Defaults
|--------------------------------------------------------------------------
|
| Configure the default properties for a modal component.
|
| Supported modal_max_width
| 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl'
*/
'component_defaults' => [
'modal_max_width' => '7xl',
'close_modal_on_click_away' => true,
'close_modal_on_escape' => true,
'close_modal_on_escape_is_forceful' => true,
'dispatch_close_event' => false,
'destroy_on_close' => false,
],
];

View File

@@ -1,6 +1,5 @@
import { createApp } from "vue"; import { createApp } from "vue";
import MagicBar from "./components/MagicBar.vue"; import MagicBar from "./components/MagicBar.vue";
import "../../vendor/wire-elements/modal/resources/js/modal";
const app = createApp({}); const app = createApp({});
app.component("magic-bar", MagicBar); app.component("magic-bar", MagicBar);

View File

@@ -3,7 +3,7 @@
<div> <div>
<div class="flex flex-col items-center pb-8"> <div class="flex flex-col items-center pb-8">
<div class="text-5xl font-bold tracking-tight text-center dark:text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center dark:text-white">Coolify</div>
<x-version /> {{-- <x-version /> --}}
</div> </div>
<div class="w-96"> <div class="w-96">
<form action="/user/confirm-password" method="POST" class="flex flex-col gap-2"> <form action="/user/confirm-password" method="POST" class="flex flex-col gap-2">

View File

@@ -5,7 +5,7 @@
<a href="{{ route('dashboard') }}"> <a href="{{ route('dashboard') }}">
<div class="text-5xl font-bold tracking-tight text-center dark:text-white">Coolify</div> <div class="text-5xl font-bold tracking-tight text-center dark:text-white">Coolify</div>
</a> </a>
<x-version /> {{-- <x-version /> --}}
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">

View File

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

View File

@@ -1,6 +1,6 @@
<x-layout-subscription> <x-layout>
<div class="min-h-screen hero"> <section class="flex flex-col h-full lg:items-center lg:justify-center">
<div class="min-w-fit"> <div class="flex flex-col items-center justify-center px-6 py-8 mx-auto max-w-7xl lg:py-0">
<h1> Verification Email Sent </h1> <h1> Verification Email Sent </h1>
<div class="flex justify-center gap-2 text-center"> <div class="flex justify-center gap-2 text-center">
<br>To activate your account, please open the email and follow the <br>To activate your account, please open the email and follow the
@@ -8,5 +8,5 @@
</div> </div>
<livewire:verify-email /> <livewire:verify-email />
</div> </div>
</div> </section>
</x-layout-subscription> </x-layout>

View File

@@ -12,7 +12,7 @@
<ul role="list" class="flex flex-col flex-1 gap-y-7"> <ul role="list" class="flex flex-col flex-1 gap-y-7">
<li class="flex-1 "> <li class="flex-1 ">
<ul role="list" class="flex flex-col h-full space-y-1.5"> <ul role="list" class="flex flex-col h-full space-y-1.5">
@if (isSubscribed()) @if (isSubscribed() || !isCloud())
<li> <li>
<a title="Dashboard" href="/" <a title="Dashboard" href="/"
class="{{ request()->is('/') ? 'menu-item-active menu-item' : 'menu-item' }}"> class="{{ request()->is('/') ? 'menu-item-active menu-item' : 'menu-item' }}">

View File

@@ -1,7 +1,7 @@
@extends('layouts.base') @extends('layouts.base')
@section('body') @section('body')
@parent @parent
@if (isSubscribed()) @if (isSubscribed() || !isCloud())
<livewire:layout-popups /> <livewire:layout-popups />
@endif @endif
@auth @auth

View File

@@ -38,7 +38,6 @@
@section('body') @section('body')
<body> <body>
{{-- @livewire('wire-elements-modal') --}}
<x-toast /> <x-toast />
<script data-navigate-once> <script data-navigate-once>
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia( if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia(

View File

@@ -1,7 +1,7 @@
@extends('layouts.base') @extends('layouts.base')
@section('body') @section('body')
@parent <main class="h-full bg-gray-50 dark:bg-base">
<main>
{{ $slot }} {{ $slot }}
</main> </main>
@parent
@endsection @endsection

View File

@@ -1,17 +1,15 @@
@php use App\Enums\ProxyTypes; @endphp @php use App\Enums\ProxyTypes; @endphp
<section class="flex flex-col h-full lg:items-center lg:justify-center"> <section class="flex flex-col h-full lg:items-center lg:justify-center">
<div class="flex flex-col items-center justify-center px-6 py-8 mx-auto max-w-7xl lg:py-0"> <div class="flex flex-col items-center justify-center px-6 py-8 mx-auto max-w-7xl lg:py-0">
@if ($state === 'welcome') @if ($currentState === 'welcome')
<h1 class="text-3xl font-bold lg:text-5xl">Welcome to Coolify</h1> <h1 class="text-3xl font-bold lg:text-5xl">Welcome to Coolify</h1>
<p class="py-6 text-base text-center lg:text-xl">Let me help you set up the basics.</p> <p class="py-6 text-base text-center lg:text-xl">Let me help you set up the basics.</p>
<div class="flex justify-center "> <div class="flex justify-center ">
<x-forms.button class="justify-center w-64 box" wire:click="$set('state','explanation')">Get <x-forms.button class="justify-center w-64 box" wire:click="$set('currentState','explanation')">Get
Started Started
</x-forms.button> </x-forms.button>
</div> </div>
@endif @elseif ($currentState === 'explanation')
<div>
@if ($state === 'explanation')
<x-boarding-step title="What is Coolify?"> <x-boarding-step title="What is Coolify?">
<x-slot:question> <x-slot:question>
Coolify is an all-in-one application to automate tasks on your servers, deploy application with Coolify is an all-in-one application to automate tasks on your servers, deploy application with
@@ -39,8 +37,7 @@
</x-forms.button> </x-forms.button>
</x-slot:actions> </x-slot:actions>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'select-server-type')
@if ($state === 'select-server-type')
<x-boarding-step title="Server"> <x-boarding-step title="Server">
<x-slot:question> <x-slot:question>
Do you want to deploy your resources to your <x-highlighted text="Localhost" /> Do you want to deploy your resources to your <x-highlighted text="Localhost" />
@@ -82,10 +79,7 @@
provider.</p> provider.</p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'private-key')
</div>
<div>
@if ($state === 'private-key')
<x-boarding-step title="SSH Key"> <x-boarding-step title="SSH Key">
<x-slot:question> <x-slot:question>
Do you have your own SSH Private Key? Do you have your own SSH Private Key?
@@ -118,10 +112,7 @@
</p> </p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'select-existing-server')
</div>
<div>
@if ($state === 'select-existing-server')
<x-boarding-step title="Select a server"> <x-boarding-step title="Select a server">
<x-slot:question> <x-slot:question>
There are already servers available for your Team. Do you want to use one of them? There are already servers available for your Team. Do you want to use one of them?
@@ -155,8 +146,7 @@
'root' or skip the boarding process and add a new private key manually to Coolify and to the 'root' or skip the boarding process and add a new private key manually to Coolify and to the
server. server.
<x-forms.input readonly id="serverPublicKey"></x-forms.input> <x-forms.input readonly id="serverPublicKey"></x-forms.input>
<x-forms.button class="w-64 box" wire:target="validateServer" <x-forms.button class="w-64 box" wire:target="validateServer" wire:click="validateServer">Check
wire:click="validateServer">Check
again again
</x-forms.button> </x-forms.button>
@endif @endif
@@ -169,10 +159,7 @@
</p> </p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'create-private-key')
</div>
<div>
@if ($state === 'create-private-key')
<x-boarding-step title="Create Private Key"> <x-boarding-step title="Create Private Key">
<x-slot:question> <x-slot:question>
Please let me know your key details. Please let me know your key details.
@@ -183,8 +170,8 @@
label="Name" id="privateKeyName" /> label="Name" id="privateKeyName" />
<x-forms.input placeholder="Description, so others will know more about this." <x-forms.input placeholder="Description, so others will know more about this."
label="Description" id="privateKeyDescription" /> label="Description" id="privateKeyDescription" />
<x-forms.textarea required placeholder="-----BEGIN OPENSSH PRIVATE KEY-----" <x-forms.textarea required placeholder="-----BEGIN OPENSSH PRIVATE KEY-----" label="Private Key"
label="Private Key" id="privateKey" /> id="privateKey" />
@if ($privateKeyType === 'create') @if ($privateKeyType === 'create')
<x-forms.textarea rows="7" readonly label="Public Key" id="publicKey" /> <x-forms.textarea rows="7" readonly label="Public Key" id="publicKey" />
<span class="font-bold dark:text-warning">ACTION REQUIRED: Copy the 'Public Key' to your <span class="font-bold dark:text-warning">ACTION REQUIRED: Copy the 'Public Key' to your
@@ -203,10 +190,7 @@
</p> </p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'create-server')
</div>
<div>
@if ($state === 'create-server')
<x-boarding-step title="Create Server"> <x-boarding-step title="Create Server">
<x-slot:question> <x-slot:question>
Please let me know your server details. Please let me know your server details.
@@ -220,13 +204,12 @@
label="Description" id="remoteServerDescription" /> label="Description" id="remoteServerDescription" />
</div> </div>
<div class="flex flex-col gap-2 lg:flex-row "> <div class="flex flex-col gap-2 lg:flex-row ">
<x-forms.input required placeholder="127.0.0.1" label="IP Address" <x-forms.input required placeholder="127.0.0.1" label="IP Address" id="remoteServerHost" />
id="remoteServerHost" />
<x-forms.input required placeholder="Port number of your server. Default is 22." <x-forms.input required placeholder="Port number of your server. Default is 22."
label="Port" id="remoteServerPort" /> label="Port" id="remoteServerPort" />
<x-forms.input required readonly <x-forms.input required readonly
placeholder="Username to connect to your server. Default is root." placeholder="Username to connect to your server. Default is root." label="Username"
label="Username" id="remoteServerUser" /> id="remoteServerUser" />
</div> </div>
<div class="lg:w-64"> <div class="lg:w-64">
<x-forms.checkbox <x-forms.checkbox
@@ -241,10 +224,7 @@
non-root users.</p> non-root users.</p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'validate-server')
</div>
<div>
@if ($state === 'validate-server')
<x-boarding-step title="Validate & Configure Server"> <x-boarding-step title="Validate & Configure Server">
<x-slot:question> <x-slot:question>
I need to validate your server (connection, Docker Engine, etc) and configure if something is I need to validate your server (connection, Docker Engine, etc) and configure if something is
@@ -271,10 +251,7 @@
documentation</a>.</p> documentation</a>.</p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'create-project')
</div>
<div>
@if ($state === 'create-project')
<x-boarding-step title="Project"> <x-boarding-step title="Project">
<x-slot:question> <x-slot:question>
@if (count($projects) > 0) @if (count($projects) > 0)
@@ -309,10 +286,7 @@
staging version of the same application, but grouped separately.</p> staging version of the same application, but grouped separately.</p>
</x-slot:explanation> </x-slot:explanation>
</x-boarding-step> </x-boarding-step>
@endif @elseif ($currentState === 'create-resource')
</div>
<div>
@if ($state === 'create-resource')
<x-boarding-step title="Resources"> <x-boarding-step title="Resources">
<x-slot:question> <x-slot:question>
Let's go to the new resource page, where you can create your first resource. Let's go to the new resource page, where you can create your first resource.
@@ -329,14 +303,17 @@
</div> </div>
<div class="flex flex-col justify-center gap-4 pt-4 lg:gap-2 lg:flex"> <div class="flex flex-col justify-center gap-4 pt-4 lg:gap-2 lg:flex">
<div class="flex justify-center w-full gap-2"> <div class="flex justify-center w-full gap-2">
<x-forms.button wire:click='skipBoarding'>Skip onboarding</x-forms.button> <div class="cursor-pointer hover:underline dark:hover:text-white" wire:click='skipBoarding'>Skip
<x-forms.button wire:click='restartBoarding'>Restart onboarding</x-forms.button> onboarding</div>
<div class="cursor-pointer hover:underline dark:hover:text-white" wire:click='restartBoarding'>Restart
onboarding</div>
</div> </div>
<x-modal-input title="How can we help?"> <x-modal-input title="How can we help?">
<x-slot:content> <x-slot:content>
<x-forms.button class="w-full" title="Send us feedback or get help!"> <div class="w-full text-center cursor-pointer hover:underline dark:hover:text-white"
title="Send us feedback or get help!">
Feedback Feedback
</x-forms.button> </div>
</x-slot:content> </x-slot:content>
<livewire:help /> <livewire:help />
</x-modal-input> </x-modal-input>

View File

@@ -1,3 +1,4 @@
<div>
@if ($settings->is_resale_license_active) @if ($settings->is_resale_license_active)
@if (auth()->user()->isAdminFromSession()) @if (auth()->user()->isAdminFromSession())
<div> <div>
@@ -29,10 +30,11 @@
<h1>Subscription</h1> <h1>Subscription</h1>
</div> </div>
<div>You are not an admin or have been removed from this team. If this does not make sense, please <span <div>You are not an admin or have been removed from this team. If this does not make sense, please <span
class="dark:text-white underline cursor-pointer" wire:click="help">contact class="underline cursor-pointer dark:text-white" wire:click="help">contact
us</span>.</div> us</span>.</div>
</div> </div>
@endif @endif
@else @else
<div class="px-10">Resale license is not active. Please contact your instance admin.</div> <div class="px-10">Resale license is not active. Please contact your instance admin.</div>
@endif @endif
</div>

View File

@@ -15,7 +15,6 @@ const colors = {
module.exports = { module.exports = {
darkMode: "selector", darkMode: "selector",
content: [ content: [
'./vendor/wire-elements/modal/resources/views/*.blade.php',
'./storage/framework/views/*.php', './storage/framework/views/*.php',
"./resources/**/*.blade.php", "./resources/**/*.blade.php",
"./app/**/*.php", "./app/**/*.php",

View File

@@ -4,7 +4,7 @@
"version": "3.12.36" "version": "3.12.36"
}, },
"v4": { "v4": {
"version": "4.0.0-beta.242" "version": "4.0.0-beta.243"
} }
} }
} }