style(theme): apply MapleDeploy palette and fonts

This commit is contained in:
rosslh 2026-06-19 20:23:24 -04:00
parent a4a0fcc442
commit 04a8264d61
13 changed files with 138 additions and 84 deletions

View file

@ -118,7 +118,7 @@
'navigate' => [ 'navigate' => [
'show_progress_bar' => true, 'show_progress_bar' => true,
'progress_bar_color' => '#6b16ed', 'progress_bar_color' => '#fde047', // MapleDeploy branding: warning yellow
], ],
/* /*

View file

@ -14,36 +14,51 @@
@custom-variant dark (&:where(.dark, .dark *)); @custom-variant dark (&:where(.dark, .dark *));
/* MapleDeploy branding: Canadian red accent, stone greys */
@theme { @theme {
--font-sans: 'Geist Sans', Inter, sans-serif; --font-sans: Inter, sans-serif;
--font-mono: 'Geist Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; --font-display: 'Overlock', sans-serif;
--font-geist-sans: 'Geist Sans', Inter, sans-serif; --font-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
--font-logs: 'Geist Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; --font-logs: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
--color-base: #101010; --color-base: #292524;
--color-warning: #fcd452; --color-warning: #fde047;
--color-warning-50: #fefce8; --color-warning-50: #fefce8;
--color-warning-100: #fef9c3; --color-warning-100: #fef9c3;
--color-warning-200: #fef08a; --color-warning-200: #fef08a;
--color-warning-300: #fde047; --color-warning-300: #fde047;
--color-warning-400: #fcd452; --color-warning-400: #facc15;
--color-warning-500: #facc15; --color-warning-500: #eab308;
--color-warning-600: #ca8a04; --color-warning-600: #ca8a04;
--color-warning-700: #a16207; --color-warning-700: #a16207;
--color-warning-800: #854d0e; --color-warning-800: #854d0e;
--color-warning-900: #713f12; --color-warning-900: #713f12;
--color-success: #22C55E; --color-success: #22C55E;
--color-error: #dc2626; /* MapleDeploy branding: red palette hue-normalized to OKLCH h=29.38 (#D52A1E) */
--color-coollabs-50: #f5f0ff; --color-error: #dc281c;
--color-coollabs: #6b16ed; --color-coollabs-50: #fef3f1;
--color-coollabs-100: #7317ff; --color-coollabs: #d52b1f;
--color-coollabs-200: #5a12c7; --color-coollabs-100: #f34d3d;
--color-coollabs-300: #4a0fa3; --color-coollabs-200: #bc251a;
--color-coolgray-100: #181818; --color-coollabs-300: #9c2117;
--color-coolgray-200: #202020; /* Override Tailwind's red scale so red-* utility classes match the MapleDeploy brand hue */
--color-coolgray-300: #242424; --color-red-50: #fef1ef;
--color-coolgray-400: #282828; --color-red-100: #ffe3df;
--color-coolgray-500: #323232; --color-red-200: #ffcec5;
--color-red-300: #feaa9d;
--color-red-400: #fb7968;
--color-red-500: #f34d3d;
--color-red-600: #d52b1f;
--color-red-700: #bc251a;
--color-red-800: #9c2117;
--color-red-900: #812219;
--color-red-950: #460d08;
/* MapleDeploy branding: coolgray remapped to stone (coolgray-200 interpolated, see COOLIFY_FORK.md) */
--color-coolgray-100: #1c1917;
--color-coolgray-200: #35322f;
--color-coolgray-300: #44403c;
--color-coolgray-400: #57534e;
--color-coolgray-500: #78716c;
/* Graphite design language (ported from ref/frontend). Layered neutral /* Graphite design language (ported from ref/frontend). Layered neutral
surfaces + translucent hairlines. See DESIGN.md. */ surfaces + translucent hairlines. See DESIGN.md. */
@ -56,7 +71,7 @@ @theme {
--color-fg: #f2f2f2; --color-fg: #f2f2f2;
--color-fg-dim: #b4b4b8; --color-fg-dim: #b4b4b8;
--color-fg-faint: #6e6e74; --color-fg-faint: #6e6e74;
--color-accent: #6b16ed; --color-accent: #d52b1f; /* MapleDeploy branding: accent → red-600 */
--color-accent-foreground: #ffffff; --color-accent-foreground: #ffffff;
--color-hairline: rgba(255, 255, 255, 0.08); --color-hairline: rgba(255, 255, 255, 0.08);
--color-nav-text: #525252; --color-nav-text: #525252;
@ -65,6 +80,33 @@ @theme {
--color-log: #0d0d0d; --color-log: #0d0d0d;
--shadow-modal: 0 24px 64px rgba(0, 0, 0, 0.55), 0 4px 16px rgba(0, 0, 0, 0.4); --shadow-modal: 0 24px 64px rgba(0, 0, 0, 0.55), 0 4px 16px rgba(0, 0, 0, 0.4);
/* MapleDeploy branding: remap neutral and gray stone for warm tone consistency with marketing/dashboard.
Upstream uses neutral for text/borders and gray for backgrounds/surfaces. Remapping both to stone
warms the entire UI to match our design system, covering ~1000 class references without touching
any Blade templates. */
--color-neutral-50: oklch(98.5% 0.001 106.423);
--color-neutral-100: oklch(97% 0.001 106.424);
--color-neutral-200: oklch(92.3% 0.003 48.717);
--color-neutral-300: oklch(86.9% 0.005 56.366);
--color-neutral-400: oklch(70.9% 0.01 56.259);
--color-neutral-500: oklch(55.3% 0.013 58.071);
--color-neutral-600: oklch(44.4% 0.011 73.639);
--color-neutral-700: oklch(37.4% 0.01 67.558);
--color-neutral-800: oklch(26.8% 0.007 34.298);
--color-neutral-900: oklch(21.6% 0.006 56.043);
--color-neutral-950: oklch(14.7% 0.004 49.25);
--color-gray-50: oklch(98.5% 0.001 106.423);
--color-gray-100: oklch(97% 0.001 106.424);
--color-gray-200: oklch(92.3% 0.003 48.717);
--color-gray-300: oklch(86.9% 0.005 56.366);
--color-gray-400: oklch(70.9% 0.01 56.259);
--color-gray-500: oklch(55.3% 0.013 58.071);
--color-gray-600: oklch(44.4% 0.011 73.639);
--color-gray-700: oklch(37.4% 0.01 67.558);
--color-gray-800: oklch(26.8% 0.007 34.298);
--color-gray-900: oklch(21.6% 0.006 56.043);
--color-gray-950: oklch(14.7% 0.004 49.25);
} }
/* /*
@ -258,7 +300,8 @@ @layer components {
*/ */
html, html,
body { body {
@apply w-full min-h-full bg-gray-50 dark:bg-app dark:text-fg-dim; /* MapleDeploy branding: text-stone-800 body text matches marketing/dashboard */
@apply w-full min-h-full text-stone-800 bg-gray-50 dark:bg-app dark:text-fg-dim;
} }
body { body {
@ -293,19 +336,20 @@ button[isHighlighted]:not(:disabled) {
} }
h1 { h1 {
@apply text-[24px] leading-7 font-semibold tracking-tight dark:text-white; /* MapleDeploy branding: font-display (Overlock) on semantic headings */
@apply text-[24px] leading-7 font-semibold tracking-tight font-display dark:text-white;
} }
h2 { h2 {
@apply text-xl font-bold dark:text-white; @apply text-xl font-bold font-display dark:text-white;
} }
h3 { h3 {
@apply text-lg font-bold dark:text-white; @apply text-lg font-bold font-display dark:text-white;
} }
h4 { h4 {
@apply text-base font-bold dark:text-white; @apply text-base font-bold font-display dark:text-white;
} }
a { a {
@ -935,7 +979,7 @@ :root {
} }
.dark { .dark {
--color-accent: #fcd452; --color-accent: #fde047; /* MapleDeploy branding: dark-mode accent → warning */
--coollabs-canvas: oklch(10% 0 0); --coollabs-canvas: oklch(10% 0 0);
/* elevated (card shells/headers) and recessed (input fills) sit a touch /* elevated (card shells/headers) and recessed (input fills) sit a touch
above the canvas so they read lighter than near-black */ above the canvas so they read lighter than near-black */
@ -954,7 +998,7 @@ .dark {
/* Theme surfaces are derived from one brand color. Changing /* Theme surfaces are derived from one brand color. Changing
--theme-base-color is enough to generate a complete dark surface ladder. */ --theme-base-color is enough to generate a complete dark surface ladder. */
html[data-theme="custom"] { html[data-theme="custom"] {
--theme-base-color: #6b16ed; --theme-base-color: #d52b1f; /* MapleDeploy branding: default custom-theme base → red-600 */
--theme-bright-color: color-mix(in srgb, var(--theme-base-color) 85%, white); --theme-bright-color: color-mix(in srgb, var(--theme-base-color) 85%, white);
--theme-scrollbar-thumb: color-mix(in srgb, var(--theme-bright-color) 70%, var(--theme-accent-foreground)); --theme-scrollbar-thumb: color-mix(in srgb, var(--theme-bright-color) 70%, var(--theme-accent-foreground));
--theme-border-color: color-mix(in oklab, var(--theme-base-color) 42%, #52525b); --theme-border-color: color-mix(in oklab, var(--theme-base-color) 42%, #52525b);
@ -1698,7 +1742,7 @@ .resource-heading-tabs-control:focus {
.resource-heading-tabs-control:focus-visible .resource-heading-tabs-control-icon { .resource-heading-tabs-control:focus-visible .resource-heading-tabs-control-icon {
box-shadow: box-shadow:
0 0 0 2px color-mix(in srgb, var(--color-coollabs, #6b16ed) 45%, transparent), 0 0 0 2px color-mix(in srgb, var(--color-coollabs, #d52b1f) 45%, transparent), /* MapleDeploy branding */
0 0 0 1px rgba(0, 0, 0, 0.08); 0 0 0 1px rgba(0, 0, 0, 0.08);
} }

View file

@ -70,18 +70,12 @@ @font-face {
src: url('../fonts/inter-v13-cyrillic_cyrillic-ext_greek_greek-ext_latin_latin-ext_vietnamese-regular.woff2') format('woff2'); src: url('../fonts/inter-v13-cyrillic_cyrillic-ext_greek_greek-ext_latin_latin-ext_vietnamese-regular.woff2') format('woff2');
} }
/* MapleDeploy branding: Overlock for headings */
@font-face { @font-face {
font-display: swap; font-display: swap;
font-family: 'Geist Mono'; font-family: 'Overlock';
font-style: normal; font-style: normal;
font-weight: 100 900; font-weight: 900;
src: url('../fonts/geist-mono-variable.woff2') format('woff2'); src: url('../fonts/overlock-v19-latin-900.woff2') format('woff2'),
} url('../fonts/overlock-v19-latin-900.ttf') format('truetype');
@font-face {
font-display: swap;
font-family: 'Geist Sans';
font-style: normal;
font-weight: 100 900;
src: url('../fonts/geist-sans-variable.woff2') format('woff2');
} }

View file

@ -40,11 +40,11 @@ @utility input-sticky {
} }
&:focus-visible { &:focus-visible {
box-shadow: inset 4px 0 0 #6b16ed, inset 0 0 0 1px #e5e5e5; box-shadow: inset 4px 0 0 #d52b1f, inset 0 0 0 1px #e5e5e5;
} }
&:where(.dark, .dark *):focus-visible { &:where(.dark, .dark *):focus-visible {
box-shadow: inset 4px 0 0 #fcd452, inset 0 0 0 1px #242424; box-shadow: inset 4px 0 0 #fde047, inset 0 0 0 1px #242424;
} }
} }
@ -178,7 +178,7 @@ @utility tag {
} }
@utility add-tag { @utility add-tag {
@apply flex items-center px-2 text-xs cursor-pointer dark:text-neutral-500/20 text-neutral-500 group-hover:text-neutral-700 dark:group-hover:text-white dark:hover:bg-coolgray-300 hover:bg-neutral-200; @apply flex items-center px-2 text-xs cursor-pointer dark:text-neutral-500 text-neutral-500 group-hover:text-neutral-700 dark:group-hover:text-white dark:hover:bg-coolgray-300 hover:bg-neutral-200;
} }
@utility user-menu-item { @utility user-menu-item {
@ -272,7 +272,8 @@ @utility icon {
} }
@utility scrollbar { @utility scrollbar {
@apply scrollbar-thumb-coollabs-100 scrollbar-track-neutral-200 dark:scrollbar-thumb-coollabs-100 dark:scrollbar-track-coolgray-200 scrollbar-thin; /* MapleDeploy branding: yellow scrollbar thumb instead of Coolify brand color */
@apply scrollbar-thumb-warning scrollbar-track-neutral-200 dark:scrollbar-thumb-warning dark:scrollbar-track-coolgray-200 scrollbar-thin;
} }
@utility main { @utility main {
@ -332,7 +333,8 @@ @utility description {
} }
@utility bg-coollabs-gradient { @utility bg-coollabs-gradient {
@apply from-purple-500 via-pink-500 to-red-500 bg-linear-to-r; /* MapleDeploy branding */
@apply from-red-700 via-red-500 to-red-400 bg-linear-to-r;
} }
@utility text-helper { @utility text-helper {
@ -396,7 +398,7 @@ @utility log-warning {
} }
@utility log-debug { @utility log-debug {
@apply bg-purple-500/10 dark:bg-purple-500/15; @apply bg-stone-500/10 dark:bg-stone-500/15;
} }
@utility log-info { @utility log-info {

Binary file not shown.

Binary file not shown.

View file

@ -99,9 +99,10 @@
{{-- Unified Input Container with Tags Inside --}} {{-- Unified Input Container with Tags Inside --}}
<div @click="$refs.searchInput.focus()" x-data="{ focused: false }" @focusin="focused = true" @focusout="focused = false" <div @click="$refs.searchInput.focus()" x-data="{ focused: false }" @focusin="focused = true" @focusout="focused = false"
class="flex flex-wrap gap-1.5 max-h-40 overflow-y-auto scrollbar py-1.5 px-2 w-full text-sm rounded-sm border-0 bg-white dark:bg-coolgray-100 cursor-text px-1 text-black dark:text-white" class="flex flex-wrap gap-1.5 max-h-40 overflow-y-auto scrollbar py-1.5 px-2 w-full text-sm rounded-sm border-0 bg-white dark:bg-coolgray-100 cursor-text px-1 text-black dark:text-white"
{{-- MapleDeploy branding: red accent instead of Coolify purple --}}
:style="(() => { :style="(() => {
const isDark = document.documentElement.classList.contains('dark'); const isDark = document.documentElement.classList.contains('dark');
const accent = isDark ? '#fcd452' : '#6b16ed'; const accent = isDark ? '#fde047' : '#d52b1f';
const border = isDark ? '#242424' : '#e5e5e5'; const border = isDark ? '#242424' : '#e5e5e5';
return focused return focused
? 'box-shadow: inset 4px 0 0 ' + accent + ', inset 0 0 0 2px ' + border + ';' ? 'box-shadow: inset 4px 0 0 ' + accent + ', inset 0 0 0 2px ' + border + ';'
@ -110,7 +111,7 @@ class="flex flex-wrap gap-1.5 max-h-40 overflow-y-auto scrollbar py-1.5 px-2 w-
:class="{ :class="{
'opacity-50': {{ $disabled ? 'true' : 'false' }} 'opacity-50': {{ $disabled ? 'true' : 'false' }}
}" wire:loading.class="opacity-50" }" wire:loading.class="opacity-50"
wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]"> wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]">
{{-- Selected Tags Inside Input --}} {{-- Selected Tags Inside Input --}}
<template x-for="value in selected" :key="value"> <template x-for="value in selected" :key="value">
@ -240,9 +241,10 @@ class="pointer-events-none absolute inset-0 rounded-[5px] border border-neutral-
{{-- Input Container --}} {{-- Input Container --}}
<div @click="openDropdown()" x-data="{ focused: false }" @focusin="focused = true" @focusout="focused = false" <div @click="openDropdown()" x-data="{ focused: false }" @focusin="focused = true" @focusout="focused = false"
class="flex items-center gap-2 py-1.5 w-full text-sm rounded-sm border-0 bg-white dark:bg-coolgray-100 cursor-text text-black dark:text-white" class="flex items-center gap-2 py-1.5 w-full text-sm rounded-sm border-0 bg-white dark:bg-coolgray-100 cursor-text text-black dark:text-white"
{{-- MapleDeploy branding: red accent instead of Coolify purple --}}
:style="(() => { :style="(() => {
const isDark = document.documentElement.classList.contains('dark'); const isDark = document.documentElement.classList.contains('dark');
const accent = isDark ? '#fcd452' : '#6b16ed'; const accent = isDark ? '#fde047' : '#d52b1f';
const border = isDark ? '#242424' : '#e5e5e5'; const border = isDark ? '#242424' : '#e5e5e5';
return focused return focused
? 'box-shadow: inset 4px 0 0 ' + accent + ', inset 0 0 0 2px ' + border + ';' ? 'box-shadow: inset 4px 0 0 ' + accent + ', inset 0 0 0 2px ' + border + ';'
@ -250,7 +252,7 @@ class="flex items-center gap-2 py-1.5 w-full text-sm rounded-sm border-0 bg-whit
})()" })()"
:class="{ :class="{
'opacity-50': {{ $disabled ? 'true' : 'false' }} 'opacity-50': {{ $disabled ? 'true' : 'false' }}
}" wire:loading.class="opacity-50" wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]"> }" wire:loading.class="opacity-50" wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]">
{{-- Display Selected Value or Search Input --}} {{-- Display Selected Value or Search Input --}}
<div class="flex-1 flex items-center min-w-0 px-1"> <div class="flex-1 flex items-center min-w-0 px-1">

View file

@ -28,16 +28,6 @@
</div> </div>
@elseif ($type === 'password') @elseif ($type === 'password')
<div class="relative" x-data="{ type: 'password' }" @success.window="type = 'password'"> <div class="relative" x-data="{ type: 'password' }" @success.window="type = 'password'">
<input autocomplete="{{ $autocomplete }}" value="{{ $value }}"
x-bind:type="type"
x-bind:class="{ 'truncate': type === 'text' && ! $el.disabled }"
{{ $attributes->merge(['class' => $defaultClass]) }} @required($required)
@if ($modelBinding !== 'null') wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @endif
wire:loading.attr="disabled"
@readonly($readonly) @disabled($disabled) id="{{ $htmlId }}"
name="{{ $name }}" placeholder="{{ $attributes->get('placeholder') }}"
aria-placeholder="{{ $attributes->get('placeholder') }}"
@if ($autofocus) x-ref="autofocusInput" @endif>
@if ($allowToPeak) @if ($allowToPeak)
<button type="button" x-on:click="type = type === 'password' ? 'text' : 'password'" <button type="button" x-on:click="type = type === 'password' ? 'text' : 'password'"
class="password-toggle flex absolute inset-y-0 right-0 z-10 items-center pr-2 cursor-pointer text-neutral-500 hover:text-black dark:text-neutral-400 dark:hover:text-white" class="password-toggle flex absolute inset-y-0 right-0 z-10 items-center pr-2 cursor-pointer text-neutral-500 hover:text-black dark:text-neutral-400 dark:hover:text-white"
@ -48,12 +38,22 @@ class="password-toggle flex absolute inset-y-0 right-0 z-10 items-center pr-2 cu
<x-reicon name="eye-off2" x-cloak x-show="type === 'text'" class="size-[18px]" /> <x-reicon name="eye-off2" x-cloak x-show="type === 'text'" class="size-[18px]" />
</button> </button>
@endif @endif
<input autocomplete="{{ $autocomplete }}" value="{{ $value }}"
x-bind:type="type"
x-bind:class="{ 'truncate': type === 'text' && ! $el.disabled }"
{{ $attributes->merge(['class' => $defaultClass]) }} @required($required)
@if ($modelBinding !== 'null') wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @endif
wire:loading.attr="disabled"
@readonly($readonly) @disabled($disabled) id="{{ $htmlId }}"
name="{{ $name }}" placeholder="{{ $attributes->get('placeholder') }}"
aria-placeholder="{{ $attributes->get('placeholder') }}"
@if ($autofocus) x-ref="autofocusInput" @endif>
</div> </div>
@else @else
<input autocomplete="{{ $autocomplete }}" @if ($value) value="{{ $value }}" @endif <input autocomplete="{{ $autocomplete }}" @if ($value) value="{{ $value }}" @endif
{{ $attributes->merge(['class' => $defaultClass]) }} @required($required) @readonly($readonly) {{ $attributes->merge(['class' => $defaultClass]) }} @required($required) @readonly($readonly)
@if ($modelBinding !== 'null') wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @endif @if ($modelBinding !== 'null') wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @endif
wire:loading.attr="disabled" wire:loading.attr="disabled"
type="{{ $type }}" @disabled($disabled) min="{{ $attributes->get('min') }}" type="{{ $type }}" @disabled($disabled) min="{{ $attributes->get('min') }}"
max="{{ $attributes->get('max') }}" minlength="{{ $attributes->get('minlength') }}" max="{{ $attributes->get('max') }}" minlength="{{ $attributes->get('minlength') }}"

View file

@ -14,7 +14,7 @@ class="mb-0! flex items-center gap-1 text-sm font-medium leading-4 {{ $disabled
@endif @endif
<select {{ $attributes->merge(['class' => $defaultClass]) }} @disabled($disabled) @required($required) <select {{ $attributes->merge(['class' => $defaultClass]) }} @disabled($disabled) @required($required)
wire:loading.attr="disabled" name={{ $modelBinding }} id="{{ $htmlId }}" wire:loading.attr="disabled" name={{ $modelBinding }} id="{{ $htmlId }}"
@if ($attributes->whereStartsWith('wire:model')->first()) {{ $attributes->whereStartsWith('wire:model')->first() }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @else wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @endif> @if ($attributes->whereStartsWith('wire:model')->first()) {{ $attributes->whereStartsWith('wire:model')->first() }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @else wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @endif>
{{ $slot }} {{ $slot }}
</select> </select>
@error($modelBinding) @error($modelBinding)

View file

@ -36,21 +36,6 @@ function handleKeydown(e) {
@else @else
@if ($type === 'password') @if ($type === 'password')
<div class="relative" x-data="{ type: 'password' }" @success.window="type = 'password'"> <div class="relative" x-data="{ type: 'password' }" @success.window="type = 'password'">
<input x-cloak x-show="type === 'password'" value="{{ $value }}"
{{ $attributes->merge(['class' => $defaultClassInput]) }} @required($required)
@if ($modelBinding !== 'null') wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @endif
wire:loading.attr="disabled"
type="{{ $type }}" @readonly($readonly) @disabled($disabled) id="{{ $htmlId }}"
name="{{ $name }}" placeholder="{{ $attributes->get('placeholder') }}"
aria-placeholder="{{ $attributes->get('placeholder') }}">
<textarea minlength="{{ $minlength }}" maxlength="{{ $maxlength }}" x-cloak x-show="type !== 'password'"
placeholder="{{ $placeholder }}" {{ $attributes->merge(['class' => $defaultClass]) }}
@if ($realtimeValidation) wire:model.debounce.200ms="{{ $modelBinding }}" wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]"
@else
wire:model={{ $value ?? $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @endif
@disabled($disabled) @readonly($readonly) @required($required) id="{{ $htmlId }}"
name="{{ $name }}" name={{ $modelBinding }}
@if ($autofocus) x-ref="autofocusInput" @endif></textarea>
@if ($allowToPeak) @if ($allowToPeak)
<button type="button" x-on:click="type = type === 'password' ? 'text' : 'password'" <button type="button" x-on:click="type = type === 'password' ? 'text' : 'password'"
class="absolute inset-y-0 right-0 flex items-center h-6 pt-2 pr-2 cursor-pointer dark:hover:text-white" class="absolute inset-y-0 right-0 flex items-center h-6 pt-2 pr-2 cursor-pointer dark:hover:text-white"
@ -71,15 +56,30 @@ class="absolute inset-y-0 right-0 flex items-center h-6 pt-2 pr-2 cursor-pointer
</svg> </svg>
</button> </button>
@endif @endif
<input x-cloak x-show="type === 'password'" value="{{ $value }}"
{{ $attributes->merge(['class' => $defaultClassInput]) }} @required($required)
@if ($modelBinding !== 'null') wire:model={{ $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @endif
wire:loading.attr="disabled"
type="{{ $type }}" @readonly($readonly) @disabled($disabled) id="{{ $htmlId }}"
name="{{ $name }}" placeholder="{{ $attributes->get('placeholder') }}"
aria-placeholder="{{ $attributes->get('placeholder') }}">
<textarea minlength="{{ $minlength }}" maxlength="{{ $maxlength }}" x-cloak x-show="type !== 'password'"
placeholder="{{ $placeholder }}" {{ $attributes->merge(['class' => $defaultClass]) }}
@if ($realtimeValidation) wire:model.debounce.200ms="{{ $modelBinding }}" wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]"
@else
wire:model={{ $value ?? $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @endif
@disabled($disabled) @readonly($readonly) @required($required) id="{{ $htmlId }}"
name="{{ $name }}" name={{ $modelBinding }}
@if ($autofocus) x-ref="autofocusInput" @endif></textarea>
</div> </div>
@else @else
<textarea minlength="{{ $minlength }}" maxlength="{{ $maxlength }}" <textarea minlength="{{ $minlength }}" maxlength="{{ $maxlength }}"
{{ $allowTab ? '@keydown.tab=handleKeydown' : '' }} placeholder="{{ $placeholder }}" {{ $allowTab ? '@keydown.tab=handleKeydown' : '' }} placeholder="{{ $placeholder }}"
{{ !$spellcheck ? 'spellcheck=false' : '' }} {{ $attributes->merge(['class' => $defaultClass]) }} {{ !$spellcheck ? 'spellcheck=false' : '' }} {{ $attributes->merge(['class' => $defaultClass]) }}
@if ($realtimeValidation) wire:model.debounce.200ms="{{ $modelBinding }}" wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @if ($realtimeValidation) wire:model.debounce.200ms="{{ $modelBinding }}" wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]"
@else @else
wire:model={{ $value ?? $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#6b16ed,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fcd452,inset_0_0_0_2px_#242424]" @endif wire:model={{ $value ?? $modelBinding }} wire:dirty.class="[box-shadow:inset_4px_0_0_#d52b1f,inset_0_0_0_2px_#e5e5e5] dark:[box-shadow:inset_4px_0_0_#fde047,inset_0_0_0_2px_#242424]" @endif
@disabled($disabled) @readonly($readonly) @required($required) id="{{ $htmlId }}" @disabled($disabled) @readonly($readonly) @required($required) id="{{ $htmlId }}"
name="{{ $name }}" name={{ $modelBinding }} name="{{ $name }}" name={{ $modelBinding }}
@if ($autofocus) x-ref="autofocusInput" @endif></textarea> @if ($autofocus) x-ref="autofocusInput" @endif></textarea>

View file

@ -1,6 +1,6 @@
<div> <div>
@unless ($embedded) @unless ($embedded)
<x-slot:title>{{ data_get_str($application, 'name')->limit(10) }} > Deployments | Coolify</x-slot> <x-slot:title>{{ data_get_str($application, 'name')->limit(10) }} > Deployments | MapleDeploy</x-slot>
<livewire:project.shared.configuration-checker :resource="$application" /> <livewire:project.shared.configuration-checker :resource="$application" />
<livewire:project.application.heading :application="$application" wire:key="application-heading-deployment-index" /> <livewire:project.application.heading :application="$application" wire:key="application-heading-deployment-index" />
@endunless @endunless

View file

@ -106,7 +106,7 @@
enabled: false, enabled: false,
}, },
grid: { grid: {
borderColor: 'rgba(128, 128, 128, 0.14)', borderColor: gridColor, // MapleDeploy branding
strokeDashArray: 4, strokeDashArray: 4,
}, },
legend: { legend: {
@ -175,6 +175,9 @@
name: 'CPU', name: 'CPU',
data: chartData[0].seriesData, data: chartData[0].seriesData,
}], }],
grid: {
borderColor: gridColor, // MapleDeploy branding
},
xaxis: { xaxis: {
type: 'datetime', type: 'datetime',
labels: { labels: {
@ -257,7 +260,7 @@
enabled: false, enabled: false,
}, },
grid: { grid: {
borderColor: 'rgba(128, 128, 128, 0.14)', borderColor: gridColor, // MapleDeploy branding
strokeDashArray: 4, strokeDashArray: 4,
}, },
legend: { legend: {
@ -322,6 +325,9 @@
name: 'Memory', name: 'Memory',
data: chartData[0].seriesData, data: chartData[0].seriesData,
}], }],
grid: {
borderColor: gridColor, // MapleDeploy branding
},
xaxis: { xaxis: {
type: 'datetime', type: 'datetime',
labels: { labels: {

View file

@ -1,6 +1,6 @@
<div> <div>
<x-slot:title> <x-slot:title>
{{ data_get_str($server, 'name')->limit(10) }} > Metrics | Coolify {{ data_get_str($server, 'name')->limit(10) }} > Metrics | MapleDeploy
</x-slot> </x-slot>
<livewire:server.navbar :server="$server" /> <livewire:server.navbar :server="$server" />
@ -109,7 +109,7 @@ class="server-settings-workspace application-settings-workspace mt-4 grid w-full
enabled: false, enabled: false,
}, },
grid: { grid: {
borderColor: 'rgba(128, 128, 128, 0.14)', borderColor: gridColor, // MapleDeploy branding
strokeDashArray: 4, strokeDashArray: 4,
}, },
legend: { legend: {
@ -189,6 +189,9 @@ class="server-settings-workspace application-settings-workspace mt-4 grid w-full
name: 'CPU', name: 'CPU',
data: chartData[0].seriesData, data: chartData[0].seriesData,
}], }],
grid: {
borderColor: gridColor, // MapleDeploy branding
},
xaxis: { xaxis: {
type: 'datetime', type: 'datetime',
labels: { labels: {
@ -227,6 +230,9 @@ class="server-settings-workspace application-settings-workspace mt-4 grid w-full
name: 'Memory', name: 'Memory',
data: chartData[0].seriesData, data: chartData[0].seriesData,
}], }],
grid: {
borderColor: gridColor, // MapleDeploy branding
},
xaxis: { xaxis: {
type: 'datetime', type: 'datetime',
labels: { labels: {