feat(early-access): implement EA filtering and UI improvements

Add Early Access version support with filtering and improved UI:

Backend:
- Add is_early_access and early_access_ends_at fields to ModelVersionRecord
- Implement two-phase EA detection (bulk API + single API enrichment)
- Add hide_early_access_updates setting to filter EA updates
- Update has_update() and has_updates_bulk() to respect EA filter setting
- Add _enrich_early_access_details() for precise EA time fetching
- Fix setting propagation through base_model_service and model_update_service

Frontend:
- Add smart relative time display for EA (in Xh, in Xd, or date)
- Replace EA label with clock icon in metadata (fa-clock)
- Show Download button with bolt icon for EA versions (fa-bolt)
- Change EA badge color to #F59F00 (CivitAI Buzz theme)
- Fix toggle UI for hide_early_access_updates setting
- Add translation keys for EA time formatting

Tests:
- Update all tests to pass with new EA functionality
- Add test coverage for EA filtering logic

Closes #815
This commit is contained in:
Will Miao
2026-02-20 10:32:51 +08:00
parent e8b37365a6
commit 67869f19ff
22 changed files with 506 additions and 31 deletions

View File

@@ -387,3 +387,51 @@
min-width: 0;
}
}
/* Early Access styles - Buzz theme color (#F59F00) */
.version-badge-early-access {
background: color-mix(in oklch, #F59F00 25%, transparent);
color: #E67700;
border-color: color-mix(in oklch, #F59F00 55%, transparent);
}
[data-theme="dark"] .version-badge-early-access {
background: color-mix(in oklch, #F59F00 20%, transparent);
color: #F59F00;
border-color: color-mix(in oklch, #F59F00 45%, transparent);
}
.version-meta-ea {
color: #E67700;
font-weight: 600;
}
[data-theme="dark"] .version-meta-ea {
color: #F59F00;
}
/* Early Access row - gray out effect */
.model-version-row.is-early-access {
opacity: 0.85;
filter: grayscale(40%);
transition: opacity 0.2s ease, filter 0.2s ease;
}
.model-version-row.is-early-access:hover {
opacity: 0.95;
filter: grayscale(25%);
}
/* Early Access download button - Buzz theme color (#F59F00) */
.version-action-early-access {
background: color-mix(in oklch, #F59F00 15%, transparent);
color: #E67700;
border-color: color-mix(in oklch, #F59F00 50%, transparent);
cursor: not-allowed;
}
[data-theme="dark"] .version-action-early-access {
background: color-mix(in oklch, #F59F00 12%, transparent);
color: #F59F00;
border-color: color-mix(in oklch, #F59F00 40%, transparent);
}