Calm 2.0 Fase 1: sistema de diseño limpio + Home en 3 zonas (1.5.0 build 51)
Sistema: - AppBackground: fuera gradiente + formas decorativas → systemGroupedBackground plano en toda la app. La profundidad la da la jerarquía, no la decoración. Home (3 zonas: estado / acción / contexto): - TotalValueCard: hero tipográfico — número 44pt rounded sobre card limpia, chip de delta semántico (verde/rojo), sparkline de evolución 56pt estilo Stocks, fila secundaria YoY / inception / forecast. Fuera el gradiente azul. - MonthlyCheckInCard state-driven: pendiente → protagonista con progreso real de fuentes (N de M) y un CTA; completado → fila discreta con checkmark, próximo check-in y streak integrado. En iPad va a ancho completo bajo el hero (zona de acción), fuera del grid. - InsightsRow: de carrusel de chips a un insight único rotatorio (tap para ciclar, dots de posición). - Eliminados del top: streak badge (vive en el check-in) y banner de pending updates (el progreso del check-in lo comunica). - Defaults nuevos: momentumStreaks/pendingUpdates/periodReturns/monthlySummary ocultos por defecto (siguen disponibles en Customize; configs guardadas de usuarios existentes se respetan). - Strings nuevas en 7 idiomas (checkin_done_*, checkin_sources_progress). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoScpmHdVj1aUf4rAp6hbe
This commit is contained in:
@@ -103,12 +103,23 @@ enum DashboardLayoutStore {
|
||||
UserDefaults.standard.removeObject(forKey: storageKey)
|
||||
}
|
||||
|
||||
/// Calm 2.0 defaults: three zones — state (total value), action (check-in),
|
||||
/// context. Redundant cards start hidden: pending updates and streaks now
|
||||
/// live inside the check-in card, period returns inside the hero. All remain
|
||||
/// available via Customize.
|
||||
private static let hiddenByDefault: Set<DashboardSection> = [
|
||||
.momentumStreaks, .pendingUpdates, .periodReturns, .monthlySummary
|
||||
]
|
||||
|
||||
private static func defaultConfigs() -> [DashboardSectionConfig] {
|
||||
DashboardSection.allCases.map { section in
|
||||
DashboardSectionConfig(
|
||||
id: section.id,
|
||||
isVisible: true,
|
||||
isCollapsed: false
|
||||
isVisible: !hiddenByDefault.contains(section),
|
||||
isCollapsed: false,
|
||||
// The check-in row is slim — full width on the iPad grid so it
|
||||
// reads as the "action" zone instead of leaving a gap cell.
|
||||
columnSpan: section == .monthlyCheckIn ? 2 : 1
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user