mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-21 23:22:13 +02:00
fix(ci): build shared packages before tests and fix formatting
- Add build:packages step to all test.yml jobs (fixes @manacore/shared-nestjs-auth not found) - Handle missing coverage artifacts gracefully in test-coverage.yml - Update .prettierignore to exclude apps-archived/ and problematic files - Format all source files to pass CI checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
5282f5545b
commit
0ebfde0851
163 changed files with 15247 additions and 14677 deletions
|
|
@ -99,7 +99,9 @@
|
|||
);
|
||||
|
||||
// Effective dark mode based on user preference or system
|
||||
let isDark = $derived(userThemePreference !== null ? userThemePreference === 'dark' : systemIsDark);
|
||||
let isDark = $derived(
|
||||
userThemePreference !== null ? userThemePreference === 'dark' : systemIsDark
|
||||
);
|
||||
|
||||
$effect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
|
|
@ -159,7 +161,13 @@
|
|||
<button
|
||||
type="button"
|
||||
onclick={toggleTheme}
|
||||
style="position: absolute; top: 1rem; left: 1rem; z-index: 50; display: flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: 0.5rem; border: 1px solid {isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)'}; background: {isDark ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.05)'}; color: {isDark ? 'rgba(255, 255, 255, 0.7)' : 'rgba(0, 0, 0, 0.7)'}; cursor: pointer; transition: all 0.2s ease;"
|
||||
style="position: absolute; top: 1rem; left: 1rem; z-index: 50; display: flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: 0.5rem; border: 1px solid {isDark
|
||||
? 'rgba(255, 255, 255, 0.2)'
|
||||
: 'rgba(0, 0, 0, 0.2)'}; background: {isDark
|
||||
? 'rgba(255, 255, 255, 0.1)'
|
||||
: 'rgba(0, 0, 0, 0.05)'}; color: {isDark
|
||||
? 'rgba(255, 255, 255, 0.7)'
|
||||
: 'rgba(0, 0, 0, 0.7)'}; cursor: pointer; transition: all 0.2s ease;"
|
||||
aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}
|
||||
>
|
||||
{#if isDark}
|
||||
|
|
@ -170,7 +178,9 @@
|
|||
</button>
|
||||
|
||||
{#if headerControls}
|
||||
<div style="position: absolute; top: 1rem; right: 1rem; z-index: 50; opacity: 0.6; display: flex; gap: 0.75rem;">
|
||||
<div
|
||||
style="position: absolute; top: 1rem; right: 1rem; z-index: 50; opacity: 0.6; display: flex; gap: 0.75rem;"
|
||||
>
|
||||
{@render headerControls()}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -120,7 +120,9 @@
|
|||
);
|
||||
|
||||
// Effective dark mode based on user preference or system
|
||||
let isDark = $derived(userThemePreference !== null ? userThemePreference === 'dark' : systemIsDark);
|
||||
let isDark = $derived(
|
||||
userThemePreference !== null ? userThemePreference === 'dark' : systemIsDark
|
||||
);
|
||||
|
||||
$effect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
|
|
@ -293,10 +295,7 @@
|
|||
|
||||
<!-- Form Section -->
|
||||
<div class="form-section">
|
||||
<div
|
||||
class="form-card"
|
||||
class:shake={shakeError}
|
||||
>
|
||||
<div class="form-card" class:shake={shakeError}>
|
||||
<div class="form-header">
|
||||
<h2 class="form-title">{t.title}</h2>
|
||||
<p class="form-subtitle">{t.subtitle}</p>
|
||||
|
|
@ -309,7 +308,13 @@
|
|||
</div>
|
||||
{/if}
|
||||
|
||||
<form onsubmit={(e) => { e.preventDefault(); handleLogin(); }} aria-busy={loading}>
|
||||
<form
|
||||
onsubmit={(e) => {
|
||||
e.preventDefault();
|
||||
handleLogin();
|
||||
}}
|
||||
aria-busy={loading}
|
||||
>
|
||||
<!-- Email -->
|
||||
<div class="input-group">
|
||||
<label for="email" class="sr-only">{t.emailPlaceholder}</label>
|
||||
|
|
@ -366,7 +371,12 @@
|
|||
<input type="checkbox" bind:checked={rememberMe} style:accent-color={primaryColor} />
|
||||
<span>{t.rememberMe}</span>
|
||||
</label>
|
||||
<button type="button" onclick={() => goto(forgotPasswordPath)} class="forgot-link" style:color={primaryColor}>
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => goto(forgotPasswordPath)}
|
||||
class="forgot-link"
|
||||
style:color={primaryColor}
|
||||
>
|
||||
{t.forgotPassword}
|
||||
</button>
|
||||
</div>
|
||||
|
|
@ -380,7 +390,13 @@
|
|||
style:border-color={showSuccess ? '#22c55e' : primaryColor}
|
||||
>
|
||||
{#if loading}
|
||||
<svg class="spinner" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||
<svg
|
||||
class="spinner"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
>
|
||||
<circle cx="12" cy="12" r="10" stroke-opacity="0.25" />
|
||||
<path d="M12 2a10 10 0 0 1 10 10" stroke-linecap="round" />
|
||||
</svg>
|
||||
|
|
@ -624,7 +640,9 @@
|
|||
border: 1px solid;
|
||||
border-radius: 0.75rem;
|
||||
font-size: 1rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
transition:
|
||||
border-color 0.2s,
|
||||
box-shadow 0.2s;
|
||||
/* Dark mode default */
|
||||
background-color: rgba(0, 0, 0, 0.2);
|
||||
border-color: rgba(255, 255, 255, 0.2);
|
||||
|
|
@ -698,7 +716,7 @@
|
|||
color: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
|
||||
.remember-label input[type="checkbox"] {
|
||||
.remember-label input[type='checkbox'] {
|
||||
width: 1.125rem;
|
||||
height: 1.125rem;
|
||||
cursor: pointer;
|
||||
|
|
@ -711,8 +729,8 @@
|
|||
place-content: center;
|
||||
}
|
||||
|
||||
.remember-label input[type="checkbox"]::before {
|
||||
content: "";
|
||||
.remember-label input[type='checkbox']::before {
|
||||
content: '';
|
||||
width: 0.65rem;
|
||||
height: 0.65rem;
|
||||
transform: scale(0);
|
||||
|
|
@ -721,15 +739,15 @@
|
|||
clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
|
||||
}
|
||||
|
||||
.remember-label input[type="checkbox"]:checked {
|
||||
.remember-label input[type='checkbox']:checked {
|
||||
border-color: var(--primary-color, #fff);
|
||||
}
|
||||
|
||||
.remember-label input[type="checkbox"]:checked::before {
|
||||
.remember-label input[type='checkbox']:checked::before {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.light .remember-label input[type="checkbox"] {
|
||||
.light .remember-label input[type='checkbox'] {
|
||||
border-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
|
|
@ -857,8 +875,12 @@
|
|||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.logo-section {
|
||||
|
|
@ -875,9 +897,23 @@
|
|||
|
||||
/* Interactive Animations */
|
||||
@keyframes shake {
|
||||
0%, 100% { transform: translateX(0); }
|
||||
10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }
|
||||
20%, 40%, 60%, 80% { transform: translateX(4px); }
|
||||
0%,
|
||||
100% {
|
||||
transform: translateX(0);
|
||||
}
|
||||
10%,
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90% {
|
||||
transform: translateX(-4px);
|
||||
}
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80% {
|
||||
transform: translateX(4px);
|
||||
}
|
||||
}
|
||||
|
||||
.shake {
|
||||
|
|
@ -885,7 +921,9 @@
|
|||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.spinner {
|
||||
|
|
@ -895,8 +933,13 @@
|
|||
}
|
||||
|
||||
@keyframes success-pulse {
|
||||
0%, 100% { transform: scale(1); }
|
||||
50% { transform: scale(1.05); }
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
}
|
||||
|
||||
.success-pulse {
|
||||
|
|
|
|||
|
|
@ -117,7 +117,9 @@
|
|||
);
|
||||
|
||||
// Effective dark mode based on user preference or system
|
||||
let isDark = $derived(userThemePreference !== null ? userThemePreference === 'dark' : systemIsDark);
|
||||
let isDark = $derived(
|
||||
userThemePreference !== null ? userThemePreference === 'dark' : systemIsDark
|
||||
);
|
||||
|
||||
$effect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
|
|
@ -241,7 +243,13 @@
|
|||
<button
|
||||
type="button"
|
||||
onclick={toggleTheme}
|
||||
style="position: absolute; top: 1rem; left: 1rem; z-index: 50; display: flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: 0.5rem; border: 1px solid {isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)'}; background: {isDark ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.05)'}; color: {isDark ? 'rgba(255, 255, 255, 0.7)' : 'rgba(0, 0, 0, 0.7)'}; cursor: pointer; transition: all 0.2s ease;"
|
||||
style="position: absolute; top: 1rem; left: 1rem; z-index: 50; display: flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: 0.5rem; border: 1px solid {isDark
|
||||
? 'rgba(255, 255, 255, 0.2)'
|
||||
: 'rgba(0, 0, 0, 0.2)'}; background: {isDark
|
||||
? 'rgba(255, 255, 255, 0.1)'
|
||||
: 'rgba(0, 0, 0, 0.05)'}; color: {isDark
|
||||
? 'rgba(255, 255, 255, 0.7)'
|
||||
: 'rgba(0, 0, 0, 0.7)'}; cursor: pointer; transition: all 0.2s ease;"
|
||||
aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}
|
||||
>
|
||||
{#if isDark}
|
||||
|
|
@ -252,7 +260,9 @@
|
|||
</button>
|
||||
|
||||
{#if headerControls}
|
||||
<div style="position: absolute; top: 1rem; right: 1rem; z-index: 50; opacity: 0.6; display: flex; gap: 0.75rem;">
|
||||
<div
|
||||
style="position: absolute; top: 1rem; right: 1rem; z-index: 50; opacity: 0.6; display: flex; gap: 0.75rem;"
|
||||
>
|
||||
{@render headerControls()}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -60,4 +60,3 @@ export interface AuthResult {
|
|||
error?: string;
|
||||
needsVerification?: boolean;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue