diff --git a/app/Http/Livewire/Sponsorship.php b/app/Http/Livewire/Sponsorship.php
new file mode 100644
index 000000000..60fbee3bd
--- /dev/null
+++ b/app/Http/Livewire/Sponsorship.php
@@ -0,0 +1,17 @@
+user()->update(['is_notification_sponsorship_enabled' => false]);
+ }
+ public function render()
+ {
+ return view('livewire.sponsorship');
+ }
+}
diff --git a/app/Models/Service.php b/app/Models/Service.php
index eabdc1d88..1349b9ee5 100644
--- a/app/Models/Service.php
+++ b/app/Models/Service.php
@@ -81,6 +81,22 @@ public function extraFields()
],
]);
break;
+ case str($image)->contains('weblate'):
+ $admin_email = $this->environment_variables()->where('key', 'WEBLATE_ADMIN_EMAIL')->first();
+ $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_WEBLATE')->first();
+ $fields->put('Weblate', [
+ 'Admin Email' => [
+ 'key' => data_get($admin_email, 'key'),
+ 'value' => data_get($admin_email, 'value'),
+ 'rules' => 'required|email',
+ ],
+ 'Admin Password' => [
+ 'key' => data_get($admin_password, 'key'),
+ 'value' => data_get($admin_password, 'value'),
+ 'rules' => 'required',
+ 'isPassword' => true,
+ ],
+ ]);
}
}
$databases = $this->databases()->get();
@@ -725,18 +741,16 @@ public function parse(bool $isNew = false): Collection
}
// Add labels to the service
- if (!$isDatabase) {
- if ($savedService->serviceType()) {
- $fqdns = generateServiceSpecificFqdns($savedService, forTraefik: true);
- } else {
- $fqdns = collect(data_get($savedService, 'fqdns'));
- }
- $defaultLabels = defaultLabels($this->id, $containerName, type: 'service', subType: $isDatabase ? 'database' : 'application', subId: $savedService->id);
- $serviceLabels = $serviceLabels->merge($defaultLabels);
- if ($fqdns->count() > 0) {
- if ($fqdns) {
- $serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik($this->uuid, $fqdns, true));
- }
+ if ($savedService->serviceType()) {
+ $fqdns = generateServiceSpecificFqdns($savedService, forTraefik: true);
+ } else {
+ $fqdns = collect(data_get($savedService, 'fqdns'));
+ }
+ $defaultLabels = defaultLabels($this->id, $containerName, type: 'service', subType: $isDatabase ? 'database' : 'application', subId: $savedService->id);
+ $serviceLabels = $serviceLabels->merge($defaultLabels);
+ if (!$isDatabase && $fqdns->count() > 0) {
+ if ($fqdns) {
+ $serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik($this->uuid, $fqdns, true));
}
}
data_set($service, 'labels', $serviceLabels->toArray());
diff --git a/app/Models/ServiceDatabase.php b/app/Models/ServiceDatabase.php
index e37821af2..c86334e39 100644
--- a/app/Models/ServiceDatabase.php
+++ b/app/Models/ServiceDatabase.php
@@ -20,6 +20,10 @@ public function type()
{
return 'service';
}
+ public function serviceType()
+ {
+ return null;
+ }
public function databaseType()
{
$image = str($this->image)->before(':');
@@ -28,7 +32,8 @@ public function databaseType()
}
return "standalone-$image";
}
- public function getServiceDatabaseUrl() {
+ public function getServiceDatabaseUrl()
+ {
$port = $this->public_port;
$realIp = $this->service->server->ip;
if ($realIp === 'host.docker.internal' || isDev()) {
diff --git a/config/sentry.php b/config/sentry.php
index 0416aba03..c576a0a38 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@
// The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
- 'release' => '4.0.0-beta.125',
+ 'release' => '4.0.0-beta.126',
// When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'),
diff --git a/config/version.php b/config/version.php
index 57e0d48f4..6a0ed299c 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
boolean('is_notification_sponsorship_enabled')->default(true);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('users', function (Blueprint $table) {
+ $table->dropColumn('is_notification_sponsorship_enabled');
+ });
+ }
+};
diff --git a/package-lock.json b/package-lock.json
index 78e00ae87..4e6e223e4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,7 +7,7 @@
"dependencies": {
"@tailwindcss/typography": "0.5.10",
"alpinejs": "3.13.1",
- "daisyui": "3.9.2",
+ "daisyui": "4.0.3",
"tailwindcss-scrollbar": "0.1.0"
},
"devDependencies": {
@@ -896,11 +896,6 @@
"node": ">= 6"
}
},
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
- },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -952,16 +947,23 @@
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
"dev": true
},
+ "node_modules/culori": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/culori/-/culori-3.2.0.tgz",
+ "integrity": "sha512-HIEbTSP7vs1mPq/2P9In6QyFE0Tkpevh0k9a+FkjhD+cwsYm9WRSbn4uMdW9O0yXlNYC3ppxL3gWWPOcvEl57w==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
"node_modules/daisyui": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.9.2.tgz",
- "integrity": "sha512-yJZ1QjHUaL+r9BkquTdzNHb7KIgAJVFh0zbOXql2Wu0r7zx5qZNLxclhjN0WLoIpY+o2h/8lqXg7ijj8oTigOw==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.0.3.tgz",
+ "integrity": "sha512-mG6PsdIA6MEHzdJwBlJxc1rqsIAAlcfhj2O8g0ol1uWg5y6C5zTcqfG8vKBqK4y2YfCxGIVgMsMWRTSm32N1Ow==",
"dependencies": {
- "colord": "^2.9",
"css-selector-tokenizer": "^0.8",
- "postcss": "^8",
- "postcss-js": "^4",
- "tailwindcss": "^3.1"
+ "culori": "^3",
+ "picocolors": "^1",
+ "postcss-js": "^4"
},
"engines": {
"node": ">=16.9.0"
diff --git a/package.json b/package.json
index 69f9e494a..b0d939330 100644
--- a/package.json
+++ b/package.json
@@ -11,14 +11,14 @@
"axios": "1.5.1",
"laravel-vite-plugin": "0.8.1",
"postcss": "8.4.31",
- "tailwindcss": "3.3.3",
+ "tailwindcss": "3.3.5",
"vite": "4.4.11",
"vue": "3.3.4"
},
"dependencies": {
"@tailwindcss/typography": "0.5.10",
"alpinejs": "3.13.1",
- "daisyui": "3.9.2",
+ "daisyui": "4.0.3",
"tailwindcss-scrollbar": "0.1.0"
}
}
diff --git a/resources/css/app.css b/resources/css/app.css
index f55c71dff..b5d09ef6d 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -53,10 +53,10 @@ .icon:hover {
@apply text-white;
}
.box {
- @apply flex p-2 transition-colors cursor-pointer min-h-16 bg-coolgray-100 hover:bg-coollabs-100 hover:text-white hover:no-underline min-w-[24rem];
+ @apply flex p-2 transition-colors cursor-pointer min-h-[4rem] bg-coolgray-100 hover:bg-coollabs-100 hover:text-white hover:no-underline min-w-[24rem];
}
.box-without-bg {
- @apply flex p-2 transition-colors min-h-16 hover:text-white hover:no-underline min-w-[24rem];
+ @apply flex p-2 transition-colors h-16 min-h-full hover:text-white hover:no-underline min-h-[4rem];
}
.description {
@apply pt-2 text-xs font-bold text-neutral-500 group-hover:text-white;
@@ -124,3 +124,6 @@ .subtitle {
.fullscreen {
@apply fixed top-0 left-0 w-full h-full z-[9999] bg-coolgray-100 overflow-y-auto scrollbar pb-4 ;
}
+input.input-sm {
+ @apply pr-10;
+}
diff --git a/resources/views/components/forms/input.blade.php b/resources/views/components/forms/input.blade.php
index 36fa0870f..8b4c5cde4 100644
--- a/resources/views/components/forms/input.blade.php
+++ b/resources/views/components/forms/input.blade.php
@@ -13,7 +13,7 @@
@if ($allowToPeak)
+ class="absolute inset-y-0 right-0 flex items-center pr-2 cursor-pointer hover:text-white">