7 Commits
recipes ... dev

11 changed files with 37 additions and 76 deletions

View File

@ -1,6 +1,7 @@
@use './variables' as *; @use './variables' as *;
@use './mixins' as *; @use './mixins' as *;
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;

View File

@ -62,5 +62,4 @@
font-size: $font-size-sm; font-size: $font-size-sm;
font-weight: $font-weight-semibold; font-weight: $font-weight-semibold;
background-color: rgba($color, 0.1); background-color: rgba($color, 0.1);
// color: darken($color, 20%);
} }

View File

@ -1,6 +1,8 @@
@use '../../assets/scss/variables' as *; @use '../../assets/scss/variables' as *;
@use '../../assets/scss/mixins' as *; @use '../../assets/scss/mixins' as *;
@use '../../assets/scss/global' as *; @use '../../assets/scss/global' as *;
@use "sass:color";
.app-detail-page { .app-detail-page {
@extend .page-wrapper; @extend .page-wrapper;
@ -69,7 +71,7 @@
&.primary { &.primary {
background: $primary; background: $primary;
color: white; color: $text-primary;
border-color: $primary; border-color: $primary;
&:hover:not(:disabled) { &:hover:not(:disabled) {
@ -82,10 +84,6 @@
background: $bg-secondary; background: $bg-secondary;
color: $text-primary; color: $text-primary;
border-color: $border-color; border-color: $border-color;
&:hover:not(:disabled) {
background: darken($bg-secondary, 5%);
}
} }
&.danger { &.danger {
@ -94,7 +92,7 @@
border-color: $error; border-color: $error;
&:hover:not(:disabled) { &:hover:not(:disabled) {
background: darken($error, 10%); background: color.adjust($error, $lightness: -10%);
} }
} }
} }
@ -163,13 +161,13 @@
} }
.chaos-active { .chaos-active {
color: darken($info, 10%); background: color.adjust($info, $lightness: -10%);
font-weight: $font-weight-medium; font-weight: $font-weight-medium;
} }
} }
.domain-link { .link {
color: $primary; color: $primary-dark;
text-decoration: none; text-decoration: none;
font-size: $font-size-base; font-size: $font-size-base;
transition: color $transition-base; transition: color $transition-base;
@ -180,22 +178,6 @@
} }
} }
.server-link {
background: none;
border: none;
color: $primary;
cursor: pointer;
padding: 0;
font-size: $font-size-base;
text-align: left;
transition: color $transition-base;
&:hover {
color: $primary-light;
text-decoration: underline;
}
}
// Version information // Version information
.version-info { .version-info {
display: flex; display: flex;
@ -286,7 +268,7 @@
transition: all $transition-base; transition: all $transition-base;
&:hover:not(:disabled) { &:hover:not(:disabled) {
background: darken($warning, 10%); background: color.adjust($warning, $lightness: -10%);
transform: translateY(-1px); transform: translateY(-1px);
} }
@ -301,7 +283,7 @@
.version-latest { .version-latest {
padding: $spacing-md; padding: $spacing-md;
background: rgba($success, 0.1); background: rgba($success, 0.1);
color: darken($success, 10%); background: color.adjust($success, $lightness: -10%);
border-radius: $radius-md; border-radius: $radius-md;
text-align: center; text-align: center;
font-size: $font-size-base; font-size: $font-size-base;

View File

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { useParams, useNavigate } from 'react-router-dom'; import { useParams, useNavigate, Link } from 'react-router-dom';
import { Header } from '../../components/Header/Header'; import { Header } from '../../components/Header/Header';
import { Terminal } from '../../components/Terminal/Terminal'; import { Terminal } from '../../components/Terminal/Terminal';
import { apiService } from '../../services/api'; import { apiService } from '../../services/api';
@ -158,7 +158,7 @@ export const AppDetail: React.FC = () => {
<span className="recipe-badge">{app.recipe}</span> <span className="recipe-badge">{app.recipe}</span>
<span className={`status-badge status-${app.status}`}>{app.status}</span> <span className={`status-badge status-${app.status}`}>{app.status}</span>
{app.chaos === 'true' && ( {app.chaos === 'true' && (
<span className="chaos-badge" title="Chaos mode enabled">🔬 Chaos</span> <span className="chaos-badge" title="Chaos mode enabled"> Chaos</span>
)} )}
</div> </div>
</div> </div>
@ -203,7 +203,7 @@ export const AppDetail: React.FC = () => {
<div className="info-item"> <div className="info-item">
<label>Domain</label> <label>Domain</label>
{app.domain ? ( {app.domain ? (
<a href={`https://${app.domain}`} target="_blank" rel="noopener noreferrer" className="domain-link"> <a href={`https://${app.domain}`} target="_blank" rel="noopener noreferrer" className="link">
{app.domain} {app.domain}
</a> </a>
) : ( ) : (
@ -212,13 +212,14 @@ export const AppDetail: React.FC = () => {
</div> </div>
<div className="info-item"> <div className="info-item">
<label>Server</label> <label htmlFor="server-link">Server</label>
<button <Link
onClick={() => navigate(`/servers/${app.server}`)} id="server-link"
className="server-link" to={`/servers/${app.server}`}
className="link"
> >
{app.server} {app.server}
</button> </Link>
</div> </div>
<div className="info-item"> <div className="info-item">
@ -236,7 +237,7 @@ export const AppDetail: React.FC = () => {
<div className="info-item"> <div className="info-item">
<label>Chaos Mode</label> <label>Chaos Mode</label>
<span className={app.chaos === 'true' ? 'chaos-active' : ''}> <span className={app.chaos === 'true' ? 'chaos-active' : ''}>
{app.chaos === 'true' ? '🔬 Enabled' : 'Disabled'} {app.chaos === 'true' ? '☠️ Enabled' : 'Disabled'}
</span> </span>
</div> </div>
</div> </div>

View File

@ -144,7 +144,7 @@
} }
.domain-link { .domain-link {
color: $primary; color: $primary-dark;
text-decoration: none; text-decoration: none;
transition: color $transition-base; transition: color $transition-base;

View File

@ -211,7 +211,7 @@ export const Apps: React.FC = () => {
<th>Server</th> <th>Server</th>
<th>Version</th> <th>Version</th>
<th>Status</th> <th>Status</th>
<th>Actions</th> {/* <th>Actions</th> */}
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -269,7 +269,7 @@ export const Apps: React.FC = () => {
{app.status} {app.status}
</span> </span>
</td> </td>
<td> {/* <td>
<div className="actions"> <div className="actions">
<button <button
className="action-btn" className="action-btn"
@ -294,7 +294,7 @@ export const Apps: React.FC = () => {
</button> </button>
)} )}
</div> </div>
</td> </td> */}
</tr> </tr>
)) ))
)} )}

View File

@ -89,7 +89,6 @@ export const Dashboard: React.FC = () => {
<button onClick={() => navigate('/apps')} className="nav-link bland-button"> <button onClick={() => navigate('/apps')} className="nav-link bland-button">
<div className="stat-card"> <div className="stat-card">
<h3>Apps</h3> <h3>Apps</h3>
<p className="stat-number">{apps.length}</p>
<p className="stat-label"> <p className="stat-label">
{deployedAppsCount} deployed {deployedAppsCount} deployed
</p> </p>
@ -99,7 +98,6 @@ export const Dashboard: React.FC = () => {
<button onClick={() => navigate('/servers')} className="nav-link bland-button"> <button onClick={() => navigate('/servers')} className="nav-link bland-button">
<div className="stat-card"> <div className="stat-card">
<h3>Servers</h3> <h3>Servers</h3>
<p className="stat-number">{servers.length}</p>
<p className="stat-label"> <p className="stat-label">
{serversWithAppsCount} connected {serversWithAppsCount} connected
</p> </p>

View File

@ -1,6 +1,7 @@
@use '../../assets/scss/variables' as *; @use '../../assets/scss/variables' as *;
@use '../../assets/scss/mixins' as *; @use '../../assets/scss/mixins' as *;
@use '../../assets/scss/global' as *; @use '../../assets/scss/global' as *;
@use "sass:color";
.server-detail-page { .server-detail-page {
@extend .page-wrapper; @extend .page-wrapper;
@ -84,7 +85,7 @@
border-color: $border-color; border-color: $border-color;
&:hover:not(:disabled) { &:hover:not(:disabled) {
background: darken($bg-secondary, 5%); background: color.adjust($bg-secondary, $lightness: -10%);
} }
} }
@ -94,7 +95,7 @@
border-color: $error; border-color: $error;
&:hover:not(:disabled) { &:hover:not(:disabled) {
background: darken($error, 10%); background: color.adjust($error, $lightness: -10%);
} }
} }
} }
@ -124,7 +125,7 @@
gap: $spacing-xs; gap: $spacing-xs;
padding: $spacing-xs $spacing-md; padding: $spacing-xs $spacing-md;
background: rgba($warning, 0.1); background: rgba($warning, 0.1);
color: darken($warning, 20%); background: color.adjust($error, $lightness: -20%);
border-radius: $radius-md; border-radius: $radius-md;
font-size: $font-size-sm; font-size: $font-size-sm;
font-weight: $font-weight-medium; font-weight: $font-weight-medium;
@ -189,11 +190,11 @@
color: $text-primary; color: $text-primary;
&.warning { &.warning {
color: darken($warning, 10%); background: color.adjust($warning, $lightness: -10%);
} }
&.chaos { &.chaos {
color: darken($info, 10%); background: color.adjust($info, $lightness: -10%);
} }
} }

View File

@ -190,7 +190,7 @@ export const Server: React.FC = () => {
{actionLoading === 'refresh' ? 'Refreshing...' : 'Refresh'} {actionLoading === 'refresh' ? 'Refreshing...' : 'Refresh'}
</button> </button>
<button <button
className="action-btn primary" className="action-btn"
onClick={() => handleAction('deploy-all')} onClick={() => handleAction('deploy-all')}
disabled={!!actionLoading} disabled={!!actionLoading}
> >
@ -280,7 +280,7 @@ export const Server: React.FC = () => {
{app.status} {app.status}
</span> </span>
{app.chaos === 'true' && ( {app.chaos === 'true' && (
<span className="chaos-badge">🔬</span> <span className="chaos-badge"></span>
)} )}
{app.upgrade !== 'latest' && ( {app.upgrade !== 'latest' && (
<span className="upgrade-badge"></span> <span className="upgrade-badge"></span>
@ -335,7 +335,7 @@ export const Server: React.FC = () => {
onClick={() => handleAction('upgrade-all')} onClick={() => handleAction('upgrade-all')}
disabled={!!actionLoading || server.upgradeCount === 0} disabled={!!actionLoading || server.upgradeCount === 0}
> >
<span className="action-text">Upgrade All Apps</span> <span className="action-text">Upgrade All Apps</span>
</button> </button>
</div> </div>
</section> </section>

View File

@ -169,9 +169,9 @@
} }
&.primary { &.primary {
background-color: $primary; // background-color: $primary;
color: white; // color: white;
border-color: $primary; // border-color: $primary;
&:hover { &:hover {
background-color: $primary-light; background-color: $primary-light;

View File

@ -252,27 +252,6 @@ const resetFilters = () => {
)} )}
</div> </div>
<div className="server-actions">
<button
className="action-btn primary"
onClick={(e) => {
e.stopPropagation();
navigate(`/servers/${server.name}`);
}}
>
View Apps
</button>
<button
className="action-btn"
onClick={(e) => {
e.stopPropagation();
navigate(`/servers/${server.name}`);
}}
>
Manage
</button>
</div>
{server.upgradeCount > 0 && ( {server.upgradeCount > 0 && (
<div className="server-alert"> <div className="server-alert">
<span className="alert-text"> <span className="alert-text">